为什么这个正则表达式模式不起作用?

时间:2013-01-11 14:51:43

标签: regex

我正在尝试选择没有4位数字或逗号“id”的逗号,我试过这个:

   ( ? < ! [ \ d { 5 } | id ] ) ,

问题

例如,如果输入字符串为“1999”,则未选择逗号,我不明白为什么。

2 个答案:

答案 0 :(得分:3)

尝试这种模式:

(?<!\d{5}|id),

您的模式(?<![\d{5}|id]),正在寻找一个不在数字之后的逗号,{}|i或{{ 1}} - 他们不应该在租船人类中:d。如果有的话,[]也会起作用,但这是多余的。

答案 1 :(得分:1)

首先,除非您使用/x标志,否则每个空格都会尝试匹配空格。所以把它们拿走。

其次,您使用[...]可能会对替换(|)进行分组,但方括号实际上表示字符类, [\d{5}|id]相当于[id5{}|]并匹配这些字符中的任何一个,但不是更多。你的意思是:

(?<!\d{5}|id),

最后一个问题可能是许多正则表达式的实现(你还没有指定你正在使用的)不支持可变宽度的lookbehind断言。所以,你可能需要做类似的事情:

(?<!\d{5}|...id),