使用正規表示式符合多行文字
嘗試使用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中文網其他相關文章!