首頁 >Java >java教程 >如何使用Java正規表示式正確匹配多行文字?

如何使用Java正規表示式正確匹配多行文字?

Barbara Streisand
Barbara Streisand原創
2024-12-10 11:30:10192瀏覽

How Can I Correctly Match Multiline Text Using Java Regular Expressions?

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

嘗試使用Java 來搭配多行文字時,您可能會遇到使用Pattern.MULTILINE修飾符和(?m) 表達式。以下是解釋差異並提供解決方案的範例:

我們有以下多行文字:

User Comments: This is \t a\ta \n test \n\n message \n

帶有Pattern.MULTILINE 修飾符的圖案:

String pattern1 = "User Comments: (\W)*(\S)*";
Pattern p = Pattern.compile(pattern1, Pattern.MULTILINE);
System.out.println(p.matcher(test).find()); // true

此模式成功匹配文本,因為Pattern.MULTILINE 修飾符允許^ 和$在每行的開頭和結尾處匹配的錨點。

帶有 (?m) 表達式的模式:

String pattern2 = "(?m)User Comments: (\W)*(\S)*";
System.out.println(test.matches(pattern2)); // false

此模式無法匹配,因為 (?m) m) 表達式不正確。應該是 (?s) 來啟用 DOTALL 模式,該模式允許點 (.) 匹配換行符。

此外,matches() 方法用於檢查整個字串是否與模式相符。在這種情況下,模式僅符合字串的一部分,因此 matches() 傳回 false。

解決方案:

使用正規表示式正確匹配多行文本,您可以將以下模式與Pattern.DOTALL 修飾符結合使用:

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

此模式將捕獲「使用者評論:」之後的文字並將其儲存在ResultString 中。

以上是如何使用Java正規表示式正確匹配多行文字?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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