2011-07-28 14 views
23

私は正しい部分をキャプチャしようとしています。java exprを使用していますが、次のコードでは、印刷されたキャプチャグループが文字列全体です。java正規表現のキャプチャグループ

String s ="xyz: 123a-45"; 
String patternStr="xyz:[ \\t]*([\\S ]+)"; 
Pattern p = Pattern.compile(patternStr); 
Matcher m = p.matcher(s); 
//System.err.println(s); 
if(m.find()){ 
    int count = m.groupCount(); 
    System.out.println("group count is "+count); 
    for(int i=0;i<count;i++){ 
     System.out.println(m.group(i)); 
    } 
} 

答えて

29

サブグループの番号は、1で始まり、0はフルテキストです。ちょうどあなたのループでcount + 1まで行きます。

+8

より正確には、 'for'ループ条件を 'i <= count'に変更してください。 –

1

これは、グループのインデックスが1から始まっているためです。グループ0はパターン全体です。

JavaDocから:キャプチャグループは左から右に1から始まります。グループ0はパターン全体を表しているので、式m.group(0)はm.group()と等価です。 もっと見るhere

+0

私が思うに、混乱は、文書が "番号付け"(あなたが好きな値から)で "索引付け"(常に0から)を混乱させているという事実に由来します。 –

関連する問題