2012-03-15 5 views
0

文字列内の2つ以上の単語を照合しようとしています。文字列はMy/word example/wordです。My exampleを抽出したいと思います。私がこれまで行ったことは次のとおりです:2つ以上の要素が一致する正規表現Java

 String test = "My/word example/word"; 
     Pattern pattern = Pattern.compile("((.*)\\/word){2,}"); 
     Matcher match = pattern.matcher(test); 
     if (match.find()) { 

       System.out.println(match.group(1)); 
      } 

しかし、それはexample/wordのみ、どのようなアイデアをプリントしますか?

+0

あなたは1つのキャプチャグループに 'My'を持っているし、別の1で' example'できませんか?どのように一般的なパターンが必要ですか? – mgibsonbr

答えて

4

は、それだけでそのグループの決勝戦をキャプチャします。

String test = "My/word example/word"; 
Pattern pattern = Pattern.compile("(\\w+)/word"); 
Matcher match = pattern.matcher(test); 
while (match.find()) { 
    System.out.println(match.group(1)); 
} 

それだけ印刷にここにいくつかのロジックを追加することは困難ではありません:あなたは、一致が見つからないまで、あなたの最良のオプションは、ここに一つだけの単語に一致するように正規表現を簡素化した後、繰り返しmatch.find()を使用することです2つ以上の一致が見つかった場合。

はまた、私は少し、スラッシュをエスケープする必要はありません、あなたは貪欲/word非常に最後まで一致しませんので、私は良いはず\w+.*を置き換えるあなたの正規表現を変更していることに注意してください。

0

あなたは*非欲張り演算子は使用することができます:あなたはキャプチャグループとの任意の繰り返しを持っている場合は

((.*?)\/word) 
+0

この回答に追加する、グループで取得する(2) –

0

間違ったグループ番号を使用している可能性がありますか? group(2)

1

/wordパーツのパッシブグループを使用して、一致した結果を反復処理して最終的な文字列を構成することができます。

String test = "My/word example/word"; 
Pattern pattern = Pattern.compile("(\\w*)(?:\\/word)"); 
Matcher match = pattern.matcher(test); 
String result = ""; 
while (match.find()) { 
    result += match.group(1) + " "; 
} 

System.out.println(result.trim()); 

出力は次のようになります。

My example