项目是一个或多个数字或字符字符串的逗号分隔列表,例如
"12"
"abc"
"12,abc,3"
我正在尝试匹配 Java 中包含零个或多个项目的括号列表,例如
""
"(12)"
"(abc,12)"
"(abc,12),(30,asdf)"
"(qqq,pp),(abc,12),(30,asdf,2),"
最后一个例子应该分别返回以下匹配组
qqq,pp
abc,12
30,asdf,2
我想出了以下(不正确的)模式
\((.+?)\)(?:,\((.+?)\))*
最后一个例子只匹配以下内容
qqq,pp
30,asdf,2
提示?谢谢
最佳答案
没错。 Java 正则表达式中不能有“可变”数量的捕获组。您的模式有两组:
\((.+?)\)(?:,\((.+?)\))*
|___| |___|
group 1 group 2
每个组将包含该组的最后一场比赛的内容。即,abc,12
将被 30,asdf,2
覆盖。
相关问题:
解决方案是使用一个表达式(类似于 \((.+?)\)
并使用 matcher.find
来遍历匹配项。
关于Java 正则表达式 : Repeating capturing groups,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6939526/