正则表达式与多行模式中的空字符串不匹配(Java)

Wie*_*ema 14 java regex

我刚观察到这种行为;

Pattern p1 = Pattern.compile("^$");
Matcher m1 = p1.matcher("");
System.out.println(m1.matches()); /* true */

Pattern p2 = Pattern.compile("^$", Pattern.MULTILINE);
Matcher m2 = p2.matcher("");
System.out.println(m2.matches()); /* false */
Run Code Online (Sandbox Code Playgroud)

令我感到奇怪的是,最后一句话是错误的.这就是文档所说的;

默认情况下,正则表达式^和$忽略行终止符,并且仅分别匹配整个输入序列的开头和结尾.如果激活MULTILINE模式,则^在输入开始时和任何行终止符之后匹配,但输入结束时除外.当处于MULTILINE模式时,$匹配在行终止符之前或输入序列的结尾.HTTP://docs.oracle.com/javase/1.4.2 ...

从我得到的,它应该匹配?以下使事情变得更加混乱;

Pattern p3 = Pattern.compile("^test$");
Matcher m3 = p3.matcher("test");
System.out.println(m3.matches()); /* true */

Pattern p4 = Pattern.compile("^test$", Pattern.MULTILINE);
Matcher m4 = p4.matcher("test");
System.out.println(m4.matches()); /* true */
Run Code Online (Sandbox Code Playgroud)

这是什么?我怎么理解这个?我希望有人可以对此有所了解,真的很感激.

Ing*_*ngo 7

如果激活MULTILINE模式,则^在输入开始时和任何行终止符之后匹配,但输入结束时除外.

由于您在输入结束时,^在多行模式下无法匹配.

这令人惊讶,甚至令人作呕,但仍然根据其文件.