2017-06-03 3 views
2

私は複数の行を含む文字列をしましたし、私は、例えば、複数のラインで特定のパターンを見つけたいは、Javaのパターンマッチを使用して複数の行が含まれてい

String s = "foo\r\nbar\r\nfoo" 
       + "foo, bar\r\nak + " 
       + "foo, bar\r\nak + " 
       + "bar, bar\r\nak + " 
       + "blr05\r\nsdfsdkfhsklfh"; 

上記の文字列私の例では+後、私は「AK」を見つけ、それを次の単語を取得したい、ここで複数行の文字列は、私は、パターンPattern.compile("^ak\\s*+\\s*(\\w+)")を作成したが、その自体がfalseを返すmatcher.find()で働いていない。このためにそのfoo,bar,blr05

です。

答えて

2

デフォルトでは、正規表現は1行のテキストにのみ一致します。これを修正するには2通りの方法があります。だから、あなたに合うか一つの解決策は、追加の引数はあなたに、複数行にわたって一致するPatternを与える追加

Pattern.compile("^ak\\s*+\\s*(\\w+)", Pattern.MULTILINE); 

書くことであろう。

更新
SLNが指摘したように、元の正規表現は、理由*を以下+の、あまり意味がありません。あなたはおそらく"^ak\\s*\\+\\s*(\\w+)"を意味しました。つまり、+をエスケープしてリテラルにします。

+0

第2の方法は何ですか? –

+1

'(?m)'を式の先頭に追加します。しかし、私はそれをやって嫌い - 第二引数の意味はややはっきりしています。 –

+0

プラスがリテラルの場合、それをエスケープする必要があります。 – sln

関連する問題