可以解释一下 java 正则表达式的以下输出:(案例 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
第 0 组:topcoder
其中以下代码:(CASE 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 组
第 0 组:顶部
组数:1
发现:“编码器”作为组 1
第 0 组:编码器
为什么 CASE 1 中没有 top 的匹配项? + 如何影响交替 (|) 的匹配?
最佳答案
当使用重复的捕获组时,即。由于量词,Matcher
将仅捕获最后一个匹配项。
您可以将整个重复捕获组包装在其自己的捕获组中以提取每个匹配项
String p = "((top|coder)+)";
这在 regex101 中有解释。 .
关于单个表达式中交替 (|) 和 + 的 Java 正则表达式行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30687865/