可以解释一下Java regex的以下输出:(案例1)
String s = "topcoder is "
String p = "(top|coder)+";
Pattern pttrn = Pattern.compile(p);
Matcher m = pttrn.matcher(s);
while(m.find()){
System.out.println("group count: " + m.groupCount());
for (int i = 1; i <= m.groupCount(); i++) {
System.out.println("Found : \"" + m.group(i) + "\" as group " + i);
}
System.out.println("Zeroth group:" + m.group(0));
}
产生以下输出:
小组人数:1
找到:“编码器”作为组1
零组:topcoder
其中以下代码:(案例2)
String s = "topcoder is ";
String p = "(top|coder)";
Pattern pttrn = Pattern.compile(p);
Matcher m = pttrn.matcher(s);
while(m.find()){
System.out.println("group count: " + m.groupCount());
for (int i = 1; i <= m.groupCount(); i++) {
System.out.println("Found : \"" + m.group(i) + "\" as group " + i);
}
System.out.println("Zeroth group:" + m.group(0));
}
产生以下输出:
小组人数:1
找到:“ top”作为组1
第零组:顶部
小组人数:1
找到:“编码器”作为组1
零组:编码器
为什么在案例1中没有最高匹配? +如何影响交替(|)的匹配?
最佳答案
使用重复的捕获组时,即由于存在量词,Matcher
将仅捕获最后一个匹配项。
您可以将整个重复的捕获组包装在其自己的捕获组中,以提取每个匹配项
String p = "((top|coder)+)";
regex101中对此进行了说明。