为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

婷婷同学_ 2019-11-20 09:38:12
一个项目是用逗号分隔的一个或多个数字或字符字符串列表,例如"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遍历匹配项。


查看完整回答
反对 回复 2019-11-20
?
慕虎7371278

TA贡献1802条经验 获得超4个赞

您可以使用([^,]+)in循环等正则表达式,也可以str.split(",")一次获取所有元素。此版本:str.split("\\s*,\\s*")甚至允许空格。


查看完整回答
反对 回复 2019-11-20
  • 3 回答
  • 0 关注
  • 1364 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信