2015-06-08 34 views
0

我有下面这段代码:为什么我得到从我的正则表达式匹配这些结果?

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)有何区别?

回答

2

种子文档中:
groupCount()

组零表示按照惯例整个图案。这不包括在这个计数中。


group(int)

捕获组是索引从左到右,从1开始。组0表示整个模式,因此表达式m.group(0)等同于m.group()。

所以组0是将被匹配的整个字符串。你有一个整个字符串的捕获组。所以在技术上有2组。

0是默认
1是你定义

定义的组索引从1开始。

+0

所以0组就像是无关紧要的我吗? –

+1

是的。你只需要使用组'1'作为计数开始形式'1'。 '0'是整个比赛的默认值。 – Saif

+0

在这种情况下,我会再加1个组? –

1

为什么我有1张数?

Matcher specs

groupCount() - 返回此匹配的图案捕获组数。

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

是否有组(0)和组之间的任何差异(1)?

group(0)是整个匹配(即与整个模式匹配的字符串),group(1)只是用第一个编号的捕获组捕获的子字符串。你的具体情况,group(0)group(1)是平等的,因为你设置一个捕获组的整体格局。因此,整个匹配(在group(0))和所捕获的字符串(在group(1))重合。

最佳实践并未在整个模式中使用捕获组,因为您始终可以使用group(0)访问它。

1

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

Pattern p = Pattern.compile("(title) = 123");,那么你将能够找到组0和1

注的区别:group()是一样group(0)

相关问题