2009-06-25 5 views
4

文字列から、指定されたパターンに一致するグループを取り出す必要があります。グループを使用するJava - Reg式

例文字列:<XmlLrvs>FIRST</XmlLrvs><XmlLrvs>SECOND</XmlLrvs><XmlLrvs>Third</XmlLrvs>

各グループが<XmlLrvs>で始まり、</XmlLrvs>で終了するものとします。ここに私のコードのスニペット...

String patternStr = "(<XmlLrvs>.+?</XmlLrvs>)+"; 

// Compile and use regular expression 
Pattern pattern = Pattern.compile(patternStr); 
Matcher matcher = pattern.matcher(text); 
matcher.matches(); 

// Get all groups for this match 
for (int i = 1; i<=matcher.groupCount(); i++) { 
    System.out.println(matcher.group(i)); 
} 

出力が<XmlLrvs>Third</XmlLrvs>ではあります。私はグループ1位と2位を期待していますが、それらはキャプチャされていません。誰も助けることができますか?

答えて

8

マッチを繰り返す必要がある場合は、グループを反復処理しています。 matches()メソッドは入力全体を照合します。あなたが望むのは、find()メソッドです。

変更

matcher.matches(); 

for (int i = 1; i<=matcher.groupCount(); i++) { 
    System.out.println(matcher.group(i)); 
} 

while (matcher.find()) { 
    System.out.println(matcher.group(1)); 
} 
+0

それを試してみてください3回の反復で – molf

+1

私はそれに同意しません。非貪欲な量子です。しかし、私はそれをテストしていません。 – waxwing

+2

私は最後の+を意味します。 – molf

0

に正規表現で+を削除する必要がある、またはすべてが一度に照合されます、そしてないことを注意
String patternStr = "<XmlLrvs>(.*?)</XmlLrvs>";
String text = "<XmlLrvs>FIRST</XmlLrvs><XmlLrvs>SECOND</XmlLrvs><XmlLrvs>Third</XmlLrvs>";
Pattern pattern = Pattern.compile(patternStr);

Matcher matcher = pattern.matcher(text);

while (matcher.find()) {
System.out.println(matcher.group(1));
}

The output is FIRST,SECOND,Third

関連する問題