为什么以下正则表达式导致'不平衡的括号错误'?
[x(?:[0-9])]
我知道这个没有意义。我正在研究一个更大的表达式,并发现这是一个产生错误的最小工作示例。我希望通过嵌套的内在选择来实现选择。
答案 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])