Java正则表达式:重复捕获组

一个项目是用逗号分隔的一个或多个数字或字符字符串列表,例如


"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

提示?谢谢


婷婷同学_
浏览 1365回答 3
3回答

慕容708150

那就对了。Java正则表达式中不能有“可变”数量的捕获组。您的图案分为两组:\((.+?)\)(?:,\((.+?)\))*  |___|        |___| group 1      group 2每个组将包含该组最后匹配的内容。即,abc,12将被覆盖30,asdf,2。解决方案是使用一个表达式(类似\((.+?)\)),并用于matcher.find遍历匹配项。

慕虎7371278

您可以使用([^,]+)in循环等正则表达式,也可以str.split(",")一次获取所有元素。此版本:str.split("\\s*,\\s*")甚至允许空格。
打开App,查看更多内容
随时随地看视频慕课网APP