我有2行(用0、1或许多crlf分隔),第一行的值始终是“ line1”,由于这个值,我尝试捕获第二行的值。
当两行之间只有一个crlf时,一切工作都很好,但是当多于一个行时,正则表达式也可以捕获crlf。
这是我的正则表达式:
(?s)line1\r\n(.*?) ok
基本上我在想这个正则表达式会起作用:
(?s)line1\r\n*(.*?) ok
但这不是,所以我怎么可能用量词*表示可能有0,1或许多crlf。
在此先感谢您的帮助
最佳答案
您几乎可以使用您的模式了。您实际上不需要启用DOTALL
和(?s)
。此模式应满足:
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/