一个项目是一个或多个数字或字符字符串的逗号分隔列表,例如
"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
提示?谢谢
原文由 Justin Wong 发布,翻译遵循 CC BY-SA 4.0 许可协议
这是正确的。在 Java 正则表达式中不能有“可变”数量的捕获组。您的模式有两组:
每个组都将包含该组 最后一场比赛 的内容。即,
abc,12
将被覆盖30,asdf,2
。相关问题:
解决方案是使用一个表达式(类似于
\((.+?)\)
)并使用matcher.find
迭代匹配项。