具有可变数量的组的正则表达式?

aio*_*obe 28 java regex

是否可以创建具有可变数量的组的正则表达式?

例如运行之后......

Pattern p = Pattern.compile("ab([cd])*ef");
Matcher m = p.matcher("abcddcef");
m.matches();
Run Code Online (Sandbox Code Playgroud)

...我想有类似的东西

  • m.group(1) = "c"
  • m.group(2) = "d"
  • m.group(3) = "d"
  • m.group(4)= "c".

(背景:我正在解析一些数据行,其中一个"字段"正在重复.我想避免matcher.find这些字段的循环.)


正如@Tim Pietzcker在评论中指出的那样,perl6.NET都有这个功能.

小智 20

根据文档,Java正则表达式不能这样做:

与组关联的捕获输入始终是该组最近匹配的子序列.如果由于量化而第二次评估组,则如果第二次评估失败,则将保留其先前捕获的值(如果有的话).例如,将字符串"aba"与表达式(a(b)?)+匹配,将第二组设置为"b".在每次比赛开始时丢弃所有捕获的输入.

(重点补充)


小智 5

您可以使用 split 将您需要的字段放入数组并循环遍历。

http://download.oracle.com/javase/1,5.0/docs/api/java/lang/String.html#split(java.lang.String )