[英]Why do I'm getting these results from my regex matcher?
我在下面的代码:
String content = "title = 123";
Pattern p = Pattern.compile("(title)");
Matcher m = p.matcher(content);
int i = 1;
while (m.find()) {
System.out.println("groupCount() = " + m.groupCount());
System.out.println("i = " + i++ + " found: " + m.group(0));
System.out.println("i = " + i++ + " found: " + m.group(1));
}
输出为:
groupCount() = 1
i = 1 found: title
i = 2 found: title
有人可以告诉我为什么我有1个组数以及在group(0)
和group(1)
得到正确的值吗?
group(0)
和group(1)
之间有什么区别吗?
种子在文档中:
groupCount()
零组按照惯例表示整个模式。 它不包括在此计数中。
和
组(INT)
捕获组从左到右从一个索引开始。 组零表示整个模式,因此表达式m.group(0)等效于m.group()。
因此,组0
是将被匹配的整个字符串。 并且您有一个包含整个字符串的捕获组。 因此,从技术上讲有2
组。
默认为0
1
是您定义的
定义的组索引从1
开始。
请参阅Matcher
规格 :
groupCount()
-返回此匹配器模式中捕获组的数量。
您只有1个捕获组: (title)
。
group(0)
是整个匹配项(即与整个模式匹配的字符串), group(1)
只是第一个编号的捕获组捕获的子字符串。 在您的特定情况下, group(0)
和group(1)
相等,因为您将捕获组设置为整个模式。 因此,整个匹配项(在group(0)
)和捕获的子字符串(在group(1)
)是重合的。
最佳实践是不要在整个模式周围使用捕获组,因为您始终可以使用group(0)
对其进行访问。
group 0
是正在使用的整个字符串。 由于您正在捕获所有内容,因此group 0
和group 1
(代表第一个捕获/匹配的组)将相同。 如果您有这样的事情:
Pattern p = Pattern.compile("(title) = 123");
那么您将能够找到0组和1组之间的差异。
注意: group()
与group(0)
相同
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.