正则表达式否定匹配查询

时间:2010-03-25 14:28:16

标签: regex regex-negation

我有一个正则表达式问题,我试图忽略数字'41',我想要4,1,14等所有匹配。

我有[^\b41\b]这实际上是我想要的,但这也忽略了值1和4的所有单次迭代。

例如,这匹配“41”,但我希望它不匹配: \ B41 \ B'/ P>

3 个答案:

答案 0 :(得分:5)

尝试类似:

\b(?!41\b)(\d+)

(?!...)构造是negative lookahead,所以这意味着:找到后跟“41”的单词边界,并在其后面捕获一系列数字。< / p>

答案 1 :(得分:1)

您可以使用否定look-ahead assertion排除41

/\b(?!41\b)\d+\b/

此正则表达式应解释为:在任何单词边界\b,如果未跟41\b(?!41\b)),则匹配一个或多个后跟的数字一个词边界。

或与否定look-behind assertion相同:

/\b\d+\b(?<!\b41)/

此正则表达式将被解释为:匹配由单词边界包围的一个或多个数字,但前提是匹配结尾的子字符串前面没有\b41(?<!\b41) )。

或者甚至可以使用基本语法:

/\b(\d|[0-35-9]\d|\d[02-9]|\d{3,})\b/

这仅匹配由以下两者的字边界包围的数字序列:

  • 一位数
  • 两个数字在第一个位置没有4或在第二个位置没有1
  • 三位或更多位数

答案 2 :(得分:1)

这类似于问题“Regular expression that doesn’t contain certain string”,所以我会从那里重复我的回答:

^((?!41).)*$

这适用于任意字符串,而不仅仅是41.请参阅my response there获取解释。