java正则表达式,提取一行吗?

java正则表达式,提取一行吗?,java,regex,multiline,Java,Regex,Multiline,给定3行,如何使用正则表达式提取第2行 line1 line2 line3 我曾经 pattern = Pattern.compile("line1.*(.*?).*line3"); 但是没有显示任何内容这将不起作用,因为您的第一个*匹配第3行的所有内容。你不情愿的比赛会输,第二场比赛也是如此。 尝试在第1行之后/第3行之前指定换行符(^和$)。尝试pattern=pattern.compile(“line1.*?(.*).*?line3”,pattern.DOTALL | pattern

给定3行,如何使用正则表达式提取第2行

line1
line2
line3 
我曾经

pattern = Pattern.compile("line1.*(.*?).*line3");

但是没有显示任何内容

这将不起作用,因为您的第一个
*
匹配第3行的所有内容。你不情愿的比赛会输,第二场比赛也是如此。
尝试在第1行之后/第3行之前指定换行符(^和$)。

尝试
pattern=pattern.compile(“line1.*?(.*).*?line3”,pattern.DOTALL | pattern.MULTILINE)

您可以提取两个非空行之间的所有内容:

(?<=.+\n).+(?=\n.+)

(?您可以像这样使用Pattern.DOTALL标志:

String str = "line1\nline2\nline3";
Pattern pt = Pattern.compile("line1\n(.+?)\nline3", Pattern.DOTALL);
Matcher m = pt.matcher(str);
while (m.find())
    System.out.printf("Matched - [%s]%n", m.group(1)); // outputs [line2]

在编译正则表达式时,尝试doOrad选项。我认为这不会工作——中间的不情愿的组不会解决0个字符吗?这似乎是摘取的,有没有办法删除它们?在你的例子中,它工作了,在我的例子中,它仍然给我新的行。还有其他的删除它们的方法吗?我试过String=String。;但不起作用您也可以调用replaceAll,但如果使用我更新的正则表达式,它甚至不会捕获
\n
,因此无需调用
replaceAll