正则表达式:不平衡的括号错误

时间:2014-03-14 21:39:51

标签: regex

为什么以下正则表达式导致'不平衡的括号错误'?

[x(?:[0-9])]

我知道这个没有意义。我正在研究一个更大的表达式,并发现这是一个产生错误的最小工作示例。我希望通过嵌套的内在选择来实现选择。

2 个答案:

答案 0 :(得分:3)

[…]创建一个字符类,它匹配您在大括号中指定的字符集中的单个字符。字符类不能包含组,量词,断言等。字符类中的所有内容都被解释为文字字符,字符范围或预定义字符集(如\s但不是{{} 1}})

因此,您的模式会将其识别为字符类.(与单个[x(?:[0-9]x(?,{{1}相匹配},或:[}中的任何字符,后跟0。但9未转义且与相应的)]不匹配,因此会产生错误。

你可能只想要:

)

这将匹配(后跟x[0-9] x的单个数字。

答案 1 :(得分:1)

你的问题是你试图在方括号[...]创建的字符类中完成整个事情。正则表达式看到的是

[x(?:[0-9]

作为一个你想要匹配的角色,然后是

)]

这没有任何意义,因为右括号在没有左边的情况下毫无意义。

您可能要做的是匹配一个字符类,后跟一个未捕获的数字:

[x](?:[0-9])

如果您试图在方括号内强制执行此操作,那么我猜测您想要匹配几种不同的方案,例如:

[xyz](?:[0-4])|[abc](?:[5-9])

Regular expression visualization

Debuggex Demo