该字符串可以类似于以下内容之一:
a(b,c)
a(a(b,c),d)
a(a(a(a(a(b,c),d),a(e,f)),g),h)
etc
我想匹配无限个"a(x,y)“。我如何使用Regex来做这件事呢?这就是我所拥有的:
\\w\\(((?:\\([a-zA-Z0-9]+\\))|(?:[a-zA-Z0-9]+)),((?:\\([a-zA-Z0-9]+\\))|(?:[a-zA-Z0-9]+))\\)
它只匹配"a(x,y)“的两个递归。
发布于 2011-12-28 18:53:30
Java的标准regex库不支持递归,因此您不能将这种通用的嵌套结构与其匹配。
但在支持递归的风格(Perl、PCRE、.NET等)中,您可以使用如下表达式:
\w+(?:\((?R)(?:,(?R))*\))?
发布于 2016-12-16 15:34:43
您还可以使用我的正则表达式库https://github.com/florianingerl/com.florianingerl.util.regex,它支持递归正则表达式!接口与java.util.regex基本一致,只是所需的导入语句不同,例如
Pattern p = Pattern.compile("(?<first>a\\((?<second>(?'first')|[a-zA-Z]),(?'second')\\))");
assert p.matcher("a(a(a(a(a(b,c),d),a(e,f)),g),h)").find();
发布于 2011-12-28 18:59:58
2个选择- 1)使用词法分析自己进行模式匹配和替换,或者2)如果你想坚持使用正则表达式,那么使用一些shell编程(或任何支持语言),并从Java调用它。
https://stackoverflow.com/questions/8659764
复制