首页 >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) 来启用 D​​OTALL 模式,该模式允许点 (.) 匹配换行符。

此外,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