2012-04-17 14 views
0

どのグループに一致するものだけが返されますか?正規表現 "Or" 1つのグループを返しますJava

私はこの正規表現を持っている:私は実行すると

".*>(\\d+.*)\\s.*\\(.*</|>(\\d+.+)<" 

:式の2番目の部分が一致しているときはいつでも、( 'OR' 演算子の後の式)

Pattern p = Pattern.compile(regex); 
    Matcher m = p.matcher(comparisonString); 

    if(m.find() == true){ 
      System.out.println(m.group(1)); 
    } 

nullが返されます。二次式( 'OR'の後の式)が一致するたびに、一致するグループを返すにはどうすればよいですか?あなたはグループをキャプチャ使用する必要が

答えて

2

Pattern pattern = Pattern.compile("(regexToMatch1)|(regexToMatch2)"); 
... 
read in stuff here 
... 
Matcher matcher = pattern.matcher(yourString); 
if (matcher.matches()) { 
    String firstString = matcher.group(1); 
    String secondString = matcher.group(2); 
} 

それからちょうどあなたがしたくないものは何でもグループ捨てます。ここ

良い例: http://javamex.com/tutorials/regular_expressions/capturing_groups.shtml

編集:待って、私はあなたが求めているものを理解しないと思います。あなたのグループは一致しますが、グループはヌルですか? matcher.group(#)の2番目のグループを参照するだけです。コール。

+0

ありがとうございます!私は最終的にこれをやって終わった:「もし(m.group(1)= nullを!){ \t \t \t \t \t \t \tのSystem.out.println(m.group(1)); \t \t \t \t \t \t}他{ \t \t \t \t \t \t \tのSystem.out.println(m.group(2))。 \t \t \t \t \t \t ' – rmp2150

+0

ああ、1つだけ一致する必要がありますか?その場合、2つのオプションのグループを持つ方が簡単でしょう。その1つは?演算子: "(最初のグループ)?(2番目のグループ)?" – Charles

+0

彼に感謝の代わりに、彼の答えをアップアップしてみませんか? –