有些人可以解释java regex的以下输出:(CASE 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组
Zeroth group: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组
Zeroth group:top
小组计数:1
发现:“编码员”为第1组
Zeroth group:coder
为什么CASE 1中的顶部不匹配? +如何影响交替的匹配(|)?
答案 0 :(得分:2)
使用重复的捕获组时,即。因为量词,Matcher
只会捕获最后一场比赛。
您可以将整个重复捕获组包装在自己的捕获组中以提取每个匹配
String p = "((top|coder)+)";
regex101中解释了这一点。