如何使用正则表达式递归匹配模式?

Leo*_*ang 6 java regex

字符串可以类似于以下之一:

a(b,c)
a(a(b,c),d)
a(a(a(a(a(b,c),d),a(e,f)),g),h)
etc
Run Code Online (Sandbox Code Playgroud)

我想匹配无限数量的"a(x,y)".我怎么能用Regex做到这一点?这就是我所拥有的:

\\w\\(((?:\\([a-zA-Z0-9]+\\))|(?:[a-zA-Z0-9]+)),((?:\\([a-zA-Z0-9]+\\))|(?:[a-zA-Z0-9]+))\\)
Run Code Online (Sandbox Code Playgroud)

它只匹配两个"a(x,y)"的递归.

Qta*_*tax 7

Java的标准正则表达式lib不支持递归,因此您无法将此类常规嵌套构造与其匹配.

但是在支持递归(Perl,PCRE,.NET等)的风格中你可以使用如下表达式:

\w+(?:\((?R)(?:,(?R))*\))?
Run Code Online (Sandbox Code Playgroud)

  • 也许你在考虑Ruby.从版本1.9开始,它使用了Oniguruma正则表达式库,它支持递归. (2认同)