首頁 >Java >java教程 >在 Java 正規表示式中符合多行文字時,「Pattern.MULTILINE」和「(?m)」有何不同?

在 Java 正規表示式中符合多行文字時,「Pattern.MULTILINE」和「(?m)」有何不同?

Patricia Arquette
Patricia Arquette原創
2024-12-08 16:59:09669瀏覽

How Do `Pattern.MULTILINE` and `(?m)` Differ When Matching Multiline Text in Java Regular Expressions?

使用正規表示式符合多行文字

嘗試在Java 中符合多行文字時,您可能會遇到使用Pattern 類別之間的行為差異使用Pattern.MULTILINE 修飾符並使用(?m) 修飾符。

要理解差異,掌握這些修飾符的用途至關重要。

Pattern.MULTILINE 和 (?m)

Pattern.MULTILINE 和 (?m) 都用於擴展正規表示式錨點(^ 和$)的行為不僅符合整個字串的開頭和結尾,還符合字串中每行的開頭和結尾string.

Pattern.DOTALL 和(?s)

但是,這些修飾符之間的主要區別在於換行符(回車符)的處理。 Pattern.MULTILINE 不會擴展點 (.) 通配符的匹配能力以包含換行符。要包含它們,您必須使用 Pattern.DOTALL 或 (?s)。

符合範例字串

在您的範例中,字串包含多行,並且您想要尋找以「使用者評論:」開頭的文字。單獨使用 Pattern.MULTILINE 將允許錨點匹配每行的開頭,但點字元不會匹配換行符。

要正確匹配多行文字並捕獲「使用者評論:」之後的字符,您應該將Pattern.DOTALL 或(?s) 與Pattern.MULTILINE 或(?m) 結合使用:

Pattern regex = Pattern.compile("^\s*User Comments:\s+(.*)", Pattern.DOTALL);
Matcher regexMatcher = regex.matcher(subjectString);
if (regexMatcher.find()) {
    ResultString = regexMatcher.group(1);
} 

此正規表示式將符合以下內容的開頭每行並將進一步捕獲「使用者評論:」之後的所有非空白字元。

以上是在 Java 正規表示式中符合多行文字時,「Pattern.MULTILINE」和「(?m)」有何不同?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn