我有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/

10-09 05:14