4

我有一个正则表达式问题,我试图忽略数字“41”,我希望 4、1、14 等全部匹配。

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

例如,这匹配“41”,但我希望它不匹配:\b41\b

4

3 回答 3

5

尝试类似:

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

(?!...)构造是一个负前瞻,因此这意味着:找到一个跟随“41”的单词边界并捕获其后的数字序列。

于 2010-03-25T14:31:17.153 回答
1

这类似于问题“不包含特定字符串的正则表达式”,所以我将从那里重复我的答案:

^((?!41).)*$

这将适用于任意字符串,而不仅仅是 41。请参阅我的回复以获取解释。

于 2010-03-25T15:04:46.977 回答
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第一个位置没有 a 或1第二个位置没有 a 的两个数字
  • 三位数或更多位数
于 2010-03-25T14:32:20.613 回答