2011-01-12 87 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之前。