2008-09-22 66 views
44

我想要一個表達式,當它遇到諸如「boon.ini」和「http」等單詞時將失敗。目標是採取這種表達方式,並能夠爲任何一組關鍵字構建。正則表達式排除關鍵字集

回答

45
^(?:(?!boon\.ini|http).)*$\r?\n? 

(從RegexBuddy的庫中提取的)匹配不包含boon.ini和/或HTTP的任何行。那是你想要的嗎?

13

與其否定表達式中的結果,您應該在代碼中執行該操作。這樣,表達就變得非常簡單。

\b(boon\.ini|http)\b 

將返回true如果boon.ini或HTTP是在字符串中的任何地方。由於\b或字邊界,它不會匹配像httpd或httpxyzzy這樣的詞。如果你願意,你可以刪除它們,它也會匹配這些。要添加更多關鍵字,只需添加更多管道。

\b(boon\.ini|http|foo|bar)\b 
4

你可能會寫好正則表達式,成功,當它遇到你正在尋找的單詞,然後反轉條件。

例如,在Perl中你會使用:

if (!/boon\.ini|http/) { 
    # the string passed! 
} 
1

哪種語言/正則表達式庫?我想你的問題是圍繞ASP.NET在這種情況下,你可以看到這篇文章的「負lookhead」部分: http://msdn.microsoft.com/en-us/library/ms972966.aspx

正則表達式的嚴格說來否定,還定義了一個普通的語言,但也有極少數庫/語言/工具,允許表達它。

負面看法可能會爲您提供相同的服務,但實際的語法取決於您使用的是什麼。 Tim的答案是與(?...)

14

一種替代表達式的示例,可用於:

^(?!.*IgnoreMe).*$ 

^ =指示行的開始
$ =表示線的末尾
(?! Expression) =表示零寬度的外觀前面的表達否定匹配

前面的^是需要的,否則當評估爲負面時ahe廣告可以從「IgnoreMe」文本內/之外的某個地方開始,並在不需要的地方進行比賽。

例如如果使用正則表達式:

(?!.*IgnoreMe).*$ 

隨着輸入「你好IgnoreMe請」,這將會導致類似:「gnoreMe請」爲負先行認定,沒有完整的字符串「IgnoreMe」後'我'。

2
^[^£]*$ 

上述表達式將僅限制字符串中的磅符號。這將允許除字符串以外的所有字符。

0

我用這個(基於添Pietzcker答案)排除非生產子域網址,谷歌Analytics(分析)輪廓濾波器:

^\w+-*\w*\.(?!(?:alpha(123)*\.|beta(123)*\.|preprod\.)domain\.com).*$ 

你可以看到這裏的情境:Regex to Exclude Multiple Words