正则表达式负匹配查询

5

我有一个正则表达式的问题,我想忽略数字'41',但是我希望4、1、14等所有数字都能匹配。

我有这个正则表达式[^\b41\b],它基本上是我想要的,但它也会忽略所有单个的1和4。

举个例子,这个正则表达式可以匹配"41",但我不希望它匹配:\b41\b

3个回答

5
尝试以下方式:
\b(?!41\b)(\d+)
(?!...) 结构是一个 负向先行断言,这意味着:查找一个单词边界,其后不跟随 "41",并捕获其后的数字序列。

1

您可以使用负向前瞻断言来排除41

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

这个正则表达式的解释如下:在任何单词边界 \b 处,如果其后不跟随 41\b ((?!41\b)),那么匹配一个或多个数字并在其后有单词边界。

或者使用否定的向后查找断言:

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

这个正则表达式的含义是:匹配一个或多个数字,这些数字被单词边界包围,但仅当匹配结尾的子字符串不是以\b41(?<!\b41))为前缀时。

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

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

这只匹配被单个数字包围的数字序列:

  • 一个单独的数字
  • 两个数字,第一个数字不是4,或者第二个数字不是1
  • 三个或更多数字

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接