为什么 Pattern.MULTILINE 不匹配 java 正则表达式中的新行

Why doesn't Pattern.MULTILINE match new lines in java regex

enter code here我不明白如何使用简单的正则表达式捕获多行:

Pattern pattern2 = Pattern.compile("^.*$", Pattern.MULTILINE);
matcher = pattern
        .matcher("11-41 pm, Oct 20, 2014 - Stef G: Ik zal er ook zij \n ttrrttttkkk");

matcher.find();
System.out.println("group=" + matcher.group());

它输出:

group=11-41 pm, Oct 20, 2014 - Stef G: Ik zal er ook zij

在输出中,carrage return 后的文本缺失。

如何避免这种情况?

我认为这样做的主要原因是您在正则表达式中使用了 $ 符号,因为它表示字符串的结尾,或者如果启用了多行,则表示字符串的结尾线。因此,您只需在匹配文本中查找从字符串开头到行首的文本。

我认为 ^.*$ 形式的正则表达式根本没有用。你想达到什么目的? Select 全文 - 所以使用 .*。如果您想从第二行获取一些文本,请尝试这样做:

^.*$.*$

或者尝试让您的文本成为 splitted by newline char:

String lines[] = String.split("\r?\n");

DOTALL 选项绝对适合您:

Pattern pattern2 = Pattern.compile("^.*$", Pattern.DOTALL);

但如果由于某种原因它没有,您可以在实际表达式中指定选项,如下所示:

Pattern pattern2 = Pattern.compile("(?s)^.*$");