2016-11-08 8 views
0

Matcher.group()が正規表現で一致したグループの番号/ idを返したと2時間だけ書いたことがあります。私が何をしたかの簡単な例:正規表現で一致したグループの番号/ IDを取得

// Group -1- -2- 
Pattern p = Pattern.compile("(abc)|(def)"); 
String t = "abc abc def def abc"; 

for (Matcher m = p.matcher(t); m.find();) { 
    System.out.print(m.group()); 
} 

私は、これは出力1, 1, 2, 2, 1、各試合のためのグループの数だろうと思いました。代わりに、実際にグループが一致した部分を返します。私が望む結果を達成するための他の方法や方法はありますか?

+0

パターン「タイプの不一致:文字列からパターンに変換できません」 – JordanGS

+0

私の間違いは申し訳ありません –

答えて

2

あなたはマッチした1見にgroup結果(複数可)を確認することができます。

for (Matcher m = p.matcher(t); m.find();) { 
    if (m.group(1) != null) { 
     System.out.print("1, "); 
    } else { 
     System.out.print("2, "); 
    } 
} 

EDIT:あなたはグループの多くを持っているし、それらをハードコーディングしたくない場合は、あなたがそれらをループすることができます代わりに(それらがまだ排他的であると仮定して):

+0

私はそれについて考えましたが、私の正規表現は非常に(> 1000文字)ですので、テキストも時間も問題です。パフォーマンスに大きな影響を与えますか? –

+0

いくつのグループがありますか? – shmosel

+0

21グループ –

関連する問題