正则表达式在多行模式下与空字符串不匹配 (Java)
我刚刚观察到这种行为;
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 */
令我感到奇怪的是,最后一种说法是错误的。这是文档所说的;
默认情况下,正则表达式 ^ 和 $ 忽略行终止符,并且仅在整个输入序列的开头和结尾分别匹配。如果激活了多行模式,则 ^ 在输入的开头和任何行终止符之后(输入末尾除外)匹配。当在多行模式下时,$ 匹配正好在行终止符或输入序列的末尾之前。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 */
那么这是什么呢?我如何理解这一点?我希望有人能对此有所了解,将不胜感激。