ホームページ >Java >&#&チュートリアル >複数行のテキストを Java 正規表現と正しく一致させるにはどうすればよいですか?

複数行のテキストを Java 正規表現と正しく一致させるにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-09 18:01:15297ブラウズ

How to Correctly Match Multiline Text with Java Regular Expressions?

複数行テキストと正規表現のマッチング

複数行テキストのマッチングでは、多くの場合、改行とアンカーの処理が必要になります。 Java の Pattern クラスを使用する場合、これを支援できる 2 つの修飾子、Pattern.MULTILINE と String.matches() があります。ただし、これらの使用法の間に混乱が生じる可能性があります。

Pattern.MULTILINE 対 (?m)

Pattern.MULTILINE と (?m) は両方とも同じ目的を果たします。 : ^ と $ が全体の先頭と末尾だけでなく、各行の先頭と末尾でも一致するようにします。 string.

String.matches() と Pattern.matcher()

String.matches() は、正規表現が文字列全体と一致することを期待します。これは、複数行のテキストを扱うときにその使用が制限される可能性があることを意味します。

例の解決

提供された例では、(?m) が String.matches( )、そこに問題があります。正規表現は複数行テキストの一部のみをキャプチャするため、String.matches() は文字列全体との一致に失敗し、false を返します。

複数行一致の適切な使用法

複数行のテキストを正しく照合するには、Pattern.compile() を Pattern.DOTALL 修飾子とともに使用する必要があります。これにより、ドット (.) が改行文字と照合できるようになります。コードの更新バージョンは次のとおりです。

String test = "User Comments: This is \t a\ta \n test \n\n message \n";
String pattern = "^\s*User Comments:\s*(.*)";
Pattern regex = Pattern.compile(pattern, Pattern.DOTALL);
Matcher regexMatcher = regex.matcher(test);
if (regexMatcher.find()) {
    String result = regexMatcher.group(1);
}

このコードは、複数行の「User Comments:」の後のテキストを正常にキャプチャします。

以上が複数行のテキストを Java 正規表現と正しく一致させるにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。