繁体   English   中英

为什么我从正则表达式匹配器中得到这些结果?

[英]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开始。

为什么我有1组人数?

请参阅Matcher规格

groupCount() -返回此匹配器模式中捕获组的数量。

您只有1个捕获组: (title)

group(0)和group(1)之间有什么区别吗?

group(0)是整个匹配项(即与整个模式匹配的字符串), group(1)只是第一个编号的捕获组捕获的子字符串。 在您的特定情况下, group(0)group(1)相等,因为您将捕获组设置为整个模式。 因此,整个匹配项(在group(0) )和捕获的子字符串(在group(1) )是重合的。

最佳实践是不要在整个模式周围使用捕获组,因为您始终可以使用group(0)对其进行访问。

group 0是正在使用的整个字符串。 由于您正在捕获所有内容,因此group 0group 1 (代表第一个捕获/匹配的组)将相​​同。 如果您有这样的事情:

Pattern p = Pattern.compile("(title) = 123"); 那么您将能够找到0组和1组之间的差异。

注意: group()group(0)相同

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM