1

のようなものを含む正規表現があります([A-Za-z]\s)+。すべての文字の後にスペースが続く 1 つのグループを返します。ただし、たとえばテキストに が含まれている場合、グループの最後の要素のみが保持さa b c dれます。グループの一致を出力しようとしましたが、文字 (d) のみが返されます。これは私のプログラムです

while (m.find()) {
      L = m.group(1);
      System.out.println(L);
                  }

私の質問は、すべての文字ではなく文字 (d) のみを取得するのはなぜですか? それらはすべて 1 つのグループを介してキャプチャされているためですか? どうすればそれを修正できますか? 1 つのグループを反復処理するにはどうすればよいですか。たとえば、1 つのグループとして検出されたすべての一致を反復しますか?

4

1 に答える 1

2

正規表現の問題は、 1 文字の後にスペースが続くすべてのシーケンスに一致することです。

あなたの例でgroup()は、文字列全体を返しa b c dます。ただし、キャプチャ中括弧が繰り返し内にある場合 ( のように+)、最後にキャプチャされた値のみを取得できるため、group(1)が返されますd

問題を解決するに+は、正規表現から を削除するだけです。これにより、find()何度か成功し、そのたびに異なる一致が得られます。その場合、括弧を削除して単純に を使用することもできますgroup()

于 2012-11-06T17:52:15.943 に答える