我刚观察到这种行为;
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)
这是什么?我怎么理解这个?我希望有人可以对此有所了解,真的很感激.
如果激活MULTILINE模式,则^在输入开始时和任何行终止符之后匹配,但输入结束时除外.
由于您在输入结束时,^在多行模式下无法匹配.
这令人惊讶,甚至令人作呕,但仍然根据其文件.
| 归档时间: |
|
| 查看次数: |
1979 次 |
| 最近记录: |