2015-06-08 61 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)

相關問題