2011-01-12 38 views

回答

9

如果你想匹配的字符串不等同於foo:如果你想匹配的字符串不含foo

^(?!foo).*$ 

^(?!.*foo).*$ 

如果你想匹配一個不包含foo的字符串作爲完整的字

^(?!.*\bfoo\b).*$ 

如果你想直到foo出現匹配的字符串,並foo之前停止比賽:

^(?:(?!foo).)* 

這些解決方案不處理換行符的字符串,所以你可能需要設置相應的正則表達式選項,如.NET中的RegexOptions.Singleline(如果這是一個問題)。

(?!foo)zero-width negative lookahead expression,這意味着它聲稱是不可能的(「負」)來匹配foo以下字符串中的當前位置(「看提前」),而不是消耗在比賽中的任何字符嘗試(「零寬度」)。

3

真的沒有什麼好的方法可以用正則表達式來做到這一點。你可以得到的最接近的是使用negative lookahead會發現正則表達式只有它不是隨後在負向前查找字符串...:

foo(?!word) 

只能找到後面沒有wordfoo

同樣存在看着身後(而不是向前):

(?<!word)foo 

只能找到foo如果它沒有通過word之前。