2014-11-21 173 views
1

我想了解如何捕捉括号工作正则表达式,但我不明白这一点...正则表达式和捕捉括号

我的代码是:

Pattern pattern = Pattern.compile("ab"); 
    Matcher m = pattern.matcher("abc"); 

    while (m.find()) { 
     for (int i = 0; i < m.groupCount(); i++) { 
      System.out.println(m.group(i)); 
     } 
    } 

,所以我根本没有展示。 我明白了,我需要一个捕获括号记住的匹配结果,并显示它。

,所以我做:

Pattern pattern = Pattern.compile("(ab)"); 
    Matcher m = pattern.matcher("abc"); 

和我的预期显示:AB

然后,我要记住并只显示匹配结果的一部分,所以我所做的:

Pattern pattern = Pattern.compile("(a)b"); 
    Matcher m = pattern.matcher("abc"); 

我期待有:一,但我有:AB

为什么呢?

回答

3

Matcher#group()的javadoc:

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

的问题是,该组零(即m.group(0))的整个图案,不捕获括号内的一个相匹配。所以,你想要的小组赛,你需要在索引1月底开始,直到该组数:

for (int i = 1; i <= m.groupCount(); i++) { 
    System.out.println(m.group(i)); 
} 

你的情况,你只有一个组。但如果你有类似Pattern.compile("(a)(b)"),那么(a)将匹配组1和(b)将匹配组2.

+0

感谢您的答案! – user2985024 2014-11-21 23:25:27