我有 2 行(由 0、1 或多个 crlf 分隔),第一行的值始终是“line1”,并且由于这个值,我 try catch 第二行的值。
当两行之间只有一个 crlf 时,一切正常,但当有多个 crlf 时,正则表达式也会捕获 crlf。
这是我的正则表达式:
(?s)line1\r\n(.*?) ok
基本上我认为这个正则表达式会起作用:
(?s)line1\r\n*(.*?) ok
但事实并非如此,那么我怎么可能用量词 * 来表示可以有 0,1 或多个 crlf。
预先感谢您的帮助
最佳答案
你的模式已经快到了。您实际上不需要使用 (?s)
启用 DOTALL
。这种模式应该足够了:
line1(?:\r\n)*(.*)
这与 line1
匹配,后跟零个或多个 \r\n
,然后是第二行。
String example = "line1\r\n\r\n\r\nline2";
Pattern pattern = Pattern.compile("line1(?:\r\n)+(.*)");
Matcher m = pattern.matcher(example);
if (m.find()) {
System.out.println(m.group(1));
}
打印:line2
。
关于java - 如何在java正则表达式中指示0,1次或多次回车换行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29162833/