用正则表达式匹配多行文本
匹配多行文本通常需要处理换行和锚定。当使用 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中文网其他相关文章!