请参阅以下有关 SO 的问题:
我的正则表达式组不一致。我的代码如下所示:
public class RegexTest {
public static void main(String[] args) {
// final String VALUES_REGEX = "^\\{([0-9a-zA-Z\\-\\_\\.]+)(?:,\\s*([0-9a-zA-Z\\-\\_\\.]*))*\\}$";
final String VALUES_REGEX = "\\{([\\w.-]+)(?:, *([\\w.-]+))*\\}";
final Pattern REGEX_PATTERN = Pattern.compile(VALUES_REGEX);
final String values = "{df1_apx.fhh.irtrs.d.rrr, ffd1-afp.farr.d.rrr.asgd, ffd2-afp.farr.d.rrr.asgd}";
final Matcher matcher = REGEX_PATTERN.matcher(values);
if (null != values && matcher.matches()) {
// for (int index=1; index<=matcher.groupCount(); ++index) {
// System.out.println(matcher.group(index));
// }
while (matcher.find()) {
System.out.println(matcher.group());
}
}
}
}
我尝试了以下组合:
A) 正则表达式为 "^\{([0-9a-zA-Z\-\_\.]+)(?:,\s*([0-9a-zA-Z\-\_\.]))\}$"并使用 groupCount() 进行迭代。结果:
df1_apx.fhh.irtrs.d.rrr
ffd2-afp.farr.d.rrr.asgd
B) 正则表达式为 ^\{([0-9a-zA-Z\-\_\.]+)(?:,\s*([0-9a-zA-Z\-\_\. ]))\}$"并使用 matcher.find()。结果:无结果。
C) 正则表达式为“\{([\w.-]+)(?:, ([\w.-]+))\}”并使用 groupCount() 进行迭代。结果:
df1_apx.fhh.irtrs.d.rrr
ffd2-afp.farr.d.rrr.asgd
D) 正则表达式为“\{([\w.-]+)(?:, ([\w.-]+))\}”并使用 matcher.find() 。结果:没有结果。
我从来没有得到一致的群体。这里的预期结果是:
df1_apx.fhh.irtrs.d.rrr
ffd1-afp.farr.d.rrr.asgd
ffd2-afp.farr.d.rrr.asgd
请告诉我,我怎样才能实现它。
最佳答案
(?<=[{,])\s*(.*?)(?=,|})
您可以简单地使用它并抓取捕获。请参阅演示。
https://regex101.com/r/sJ9gM7/33
当您有 (#something)*
时,正则表达式引擎只会记住最后一个组。您不会以这种方式获得所有组。
关于Java正则表达式不一致组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29374226/