我正在尝试使用 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
or (?m)
告诉 Java 接受锚点^
and $
在每行的开头和结尾匹配(否则它们仅在整个字符串的开头/结尾匹配)。
Pattern.DOTALL
or (?s)
告诉 Java 也允许点匹配换行符。
其次,在您的情况下,正则表达式失败,因为您正在使用matches()
期望正则表达式匹配的方法entirestring - 这当然不起作用,因为后面还剩下一些字符(\\W)*(\\S)*
已匹配。
因此,如果您只是寻找以以下开头的字符串User Comments:
,使用正则表达式
^\s*User Comments:\s*(.*)
与Pattern.DOTALL
option:
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:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)