我剛剛觀察到這種行爲;正則表達式在多行模式下不匹配空字符串(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 */
這讓我覺得奇怪,最後一個陳述是錯誤的。這是文檔所說的;
默認情況下,正則表達式^和$忽略行結束符,並且只能匹配整個輸入序列的開始和結束。如果激活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 */
那麼這是什麼?我如何理解這一點?我希望有人能夠闡明這一點,會非常感激。
這是Java SE 6中(MacOS X系統默認) – 2012-01-17 14:28:22
剛在OpenJDK的(IcedTea6 1.9.10)和相同的奇怪的行爲成立。 – 2012-01-17 14:33:41
同樣在Oracle JRE 7 – Ingo 2012-01-18 11:25:42