Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在java正则表达式中指示0,1或多次回车换行_Java_Regex - Fatal编程技术网

如何在java正则表达式中指示0,1或多次回车换行

如何在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));

我有两行(由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));
}
当两行之间只有一个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我的代码只是一个示例,大概您可以使用我建议的模式。请注意:这类信息在你的问题中非常有用,如果它会影响答案的话!