【发布时间】:2011-01-31 18:12:38
【问题描述】:
我遇到了一个正则表达式问题,我试图忽略数字“41”,我希望 4、1、14 等都匹配。
我得到了这个[^\b41\b],这实际上是我想要的,但这也忽略了值 1 和 4 的所有单次迭代。
例如,这匹配“41”,但我希望它不匹配: \b41\b
【问题讨论】:
标签: regex regex-negation
我遇到了一个正则表达式问题,我试图忽略数字“41”,我希望 4、1、14 等都匹配。
我得到了这个[^\b41\b],这实际上是我想要的,但这也忽略了值 1 和 4 的所有单次迭代。
例如,这匹配“41”,但我希望它不匹配: \b41\b
【问题讨论】:
标签: regex regex-negation
这类似于问题“Regular expression that doesn’t contain certain string”,所以我将从那里重复我的答案:
^((?!41).)*$
这将适用于任意字符串,而不仅仅是 41。有关说明,请参阅 my response there。
【讨论】:
您可以使用否定的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 的两个数字【讨论】:
【讨论】: