首页 >Java >java教程 >如何正确匹配多行文本与Java正则表达式?

如何正确匹配多行文本与Java正则表达式?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-09 18:01:15299浏览

How to Correctly Match Multiline Text with Java Regular Expressions?

用正则表达式匹配多行文本

匹配多行文本通常需要处理换行和锚定。当使用 Java 的 Pattern 类时,有两个修饰符可以帮助实现这一点:Pattern.MULTILINE 和 String.matches()。但是,它们的用法可能会产生混淆。

Pattern.MULTILINE 与 (?m)

Pattern.MULTILINE 和 (?m) 都有相同的用途:允许 ^ 和 $ 在每行的开头和结尾匹配,而不仅仅是在整行的开头和结尾string.

String.matches() 与 Pattern.matcher()

String.matches() 期望正则表达式匹配整个字符串。这意味着在处理多行文本时它的使用会受到限制。

解决示例

在提供的示例中, (?m) 与 String.matches( ),这就是问题所在。由于正则表达式仅捕获多行文本的一部分,因此 String.matches() 无法匹配整个字符串并返回 false。

多行匹配的正确用法

要正确匹配多行文本,您应该使用 Pattern.compile() 和 Pattern.DOTALL 修饰符,它允许点 (.) 匹配换行符。以下是代码的更新版本:

String test = "User Comments: This is \t a\ta \n test \n\n message \n";
String pattern = "^\s*User Comments:\s*(.*)";
Pattern regex = Pattern.compile(pattern, Pattern.DOTALL);
Matcher regexMatcher = regex.matcher(test);
if (regexMatcher.find()) {
    String result = regexMatcher.group(1);
}

此代码将成功捕获多行“用户评论:”之后的文本。

以上是如何正确匹配多行文本与Java正则表达式?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn