Java使用正则表达式匹配多行文字
我正在尝试使用Java匹配多行文本。当我将Pattern
类与Pattern.MULTILINE
修饰符一起使用时,我可以匹配,但不能(?m)
.
使用(?m)
和使用相同的模式String.matches
似乎无效。
我确定我缺少什么,但不知道是什么。正则表达式不是很好。
这就是我尝试过的
String test = "User Comments: This is \t a\ta \n test \n\n message \n";String pattern1 = "User Comments: (\\W)*(\\S)*";
Pattern p = Pattern.compile(pattern1, Pattern.MULTILINE);
System.out.println(p.matcher(test).find()); //true
String pattern2 = "(?m)User Comments: (\\W)*(\\S)*";
System.out.println(test.matches(pattern2)); //false - why?
回答:
首先,你在错误的假设下使用修饰符。
Pattern.MULTILINE
或(?m)
告诉Java接受锚点^
并$
在每行的开头和结尾进行匹配(否则,它们仅在整个字符串的开头/结尾进行匹配)。
Pattern.DOTALL
或(?s)
告诉Java也允许点与换行符匹配。
其次,在你的情况下,正则表达式失败,因为你使用的matches()是期望正则表达式匹配整个字符串的方法-这当然不起作用,因为(\\W)*(\\S)*
匹配后还剩下一些字符。
因此,如果你只是在寻找以开头的字符串User Comments:
,请使用regex
^\s*User Comments:\s*(.*)
与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 然后将包含以下内容 User Comments:
以上是 Java使用正则表达式匹配多行文字 的全部内容, 来源链接: utcz.com/qa/426681.html