Java 正则表达式 : Repeating capturing groups

标签 java regex

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

"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/

相关文章:

java - 通过单击按钮从 servlet 下载图像 i GWT?

java - 文本字段内的文本字段

java - 如何获取输入元素的文本属性? - 网络驱动程序

regex - Golang替换不在引号之间的所有空格

hh :mm:ss in String 的 Java 正则表达式匹配

Java 正则表达式和美元符号

javascript - 在 Javascript 中组合两个正则表达式

regex - 匹配包版本字符串在/bin/sh

java - 如何使用 Java 启用来自另一个 Activity 的按钮?

java - 如何知道哪个类实现了该接口(interface)?