使用正则表达式匹配多行文本
尝试在 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中文网其他相关文章!