一尘不染

Java组数可变的正则表达式?

java

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

例如运行此之后…

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

…我想要一些类似的东西

  • m.group(1) = “c”
  • m.group(2) = “d”
  • m.group(3) = “d”
  • m.group(4)= “c”。

(背景:我正在解析一些数据行,“字段”之一正在重复。我想避免matcher.find这些字段的循环。)


阅读 397

收藏
2020-03-13

共1个答案

一尘不染

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

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

2020-03-13