一个项目是用逗号分隔的一个或多个数字或字符字符串列表,例如"12""abc""12,abc,3"我正在尝试匹配Java中零个或多个项目的包围列表,例如"""(12)""(abc,12)""(abc,12),(30,asdf)""(qqq,pp),(abc,12),(30,asdf,2),"对于上一个示例,该示例应分别返回以下匹配组qqq,ppabc,1230,asdf,2我提出了以下(错误的)模式\((.+?)\)(?:,\((.+?)\))*最后一个示例仅与以下内容匹配qqq,pp30,asdf,2提示?谢谢
3 回答
慕容708150
TA贡献1831条经验 获得超4个赞
那就对了。Java正则表达式中不能有“可变”数量的捕获组。您的图案分为两组:
\((.+?)\)(?:,\((.+?)\))*
|___| |___|
group 1 group 2
每个组将包含该组最后匹配的内容。即,abc,12将被覆盖30,asdf,2。
解决方案是使用一个表达式(类似\((.+?)\)),并用于matcher.find遍历匹配项。
慕虎7371278
TA贡献1802条经验 获得超4个赞
您可以使用([^,]+)
in循环等正则表达式,也可以str.split(",")
一次获取所有元素。此版本:str.split("\\s*,\\s*")
甚至允许空格。
添加回答
举报
0/150
提交
取消