为什么 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)^.*$");
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)^.*$");