2014-11-21 177 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