如何在java正则表达式中指示0,1或多次回车换行
我有两行(由0、1或许多crlf分隔),第一行的值始终是“line1”,由于这个值,我尝试捕捉第二行的值如何在java正则表达式中指示0,1或多次回车换行,java,regex,Java,Regex,我有两行(由0、1或许多crlf分隔),第一行的值始终是“line1”,由于这个值,我尝试捕捉第二行的值 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));
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));
}
当两行之间只有一个crlf时,一切正常,但当有多个crlf时,正则表达式也会捕获crlf
这是我的正则表达式:
(?s)line1\r\n(.*?) ok
基本上我认为这个正则表达式会起作用:
(?s)line1\r\n*(.*?) ok
但事实并非如此,所以我怎么可能用量词*表示可以有0,1或多个crlf
事先谢谢你的帮助我会这样做的
(?s)line1(\r\n)*(.*)
您启用*只是因为\r\n新的不匹配
我怎么可能用量词*表示可以有0,1或多个crlf
您可能希望将任何换行符序列与
[\r\n]*
匹配。这将匹配\r\n
,\n
,\r
任意次数。您的正则表达式可能看起来像(?s)line1[\r\n]*(.*?)
,然后。您的模式就快到了。实际上,您不需要使用(?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));
}
Prints:
line2
问题是我不想捕获\r\n特征,我不是用java开发的,我只是使用java开发的工具,它允许我使用正则表达式来解析一些pages@user2443476我的代码只是一个示例,大概您可以使用我建议的模式。请注意:这类信息在你的问题中非常有用,如果它会影响答案的话!