2012-10-16 102 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[^,]*}[^,]*$ 

多行修改。