2012-10-16 161 views
0

我需要一些正则表达式帮助。如何删除包含字符串的行并且不包含其他字符串?

使用Firefox firebug扩展“css-usage”,我能够导出一个新的css文件,其中该实用程序将“UNUSED”添加到每个没有在页面中引用的类。

我想现在删除包含UNUSED样式的每种样式,但是有一些复杂性。也就是说,一些标签与其他标签/选择器之间用逗号分隔,这些标签或选择器仍然可以使用,所以我不想删除任何有逗号的行。其次,一些样式在花括号中的一个很长的多行块中指定,所以我不想删除任何没有大括号'}'的行。

我正在使用mac,所以任何使用SED或AWk或vi的解决方案都是可以接受的。我想删除一个以“UNUSED”开头且不包含逗号的css文件中的所有行,并且必须有一个闭合的“}”大括号。

回答

0

要测试一个字符串是否包含一个字符而不捕获该字符或向前移动该指针,请使用向前查看。

(?=.*[,]) 

或者,要确保字符串不包含该字符,请使用负向预览。

(?!.*[,]) 

如果你想确保一个字符串不包含字符,但不包含其它字符,你可以将消极和积极的向前看符号。

(?!.*[,])(?=.*[}])(?=.*UNUSED) 

最后,要实际选择匹配发生的整个字符串,请在lookahead之后使用。*。

^(?!.*[,])(?=.*[}])(?=.*UNUSED).*$ 

我主要是熟悉.NET,但我相信有很多正则表达式引擎具有允许您指定是否^$将匹配整个输入字符串的开始/结束或的开始/结束选项线。你想要第二个选项。

最后,您可以使用正则表达式替换将与给定表达式匹配的行替换为空字符串(从而“删除”这些行)。

0

要匹配UNUSED没有逗号,并确保其与}结束:

UNUSED [^,]*} 
0

使用正则表达式

^UNUSED[^,]*}[^,]*$ 

多行修改。