首页 >Java >java教程 >在 Java 正则表达式中匹配多行文本时,'Pattern.MULTILINE”和'(?m)”有何不同?

在 Java 正则表达式中匹配多行文本时,'Pattern.MULTILINE”和'(?m)”有何不同?

Patricia Arquette
Patricia Arquette原创
2024-12-08 16:59:09718浏览

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