2014-06-23 27 views
2

我一直想知道爲什麼字符"("")"匹配模式"[\\p{Alpha} '-,.]"
請看看我的代碼。對於字符"("")",方法matches將返回true
另外,如果我試圖匹配我的模式,是否還有其他字符會返回trueJava正則表達式 - 字符「(」和「)」匹配模式「[\ p {Alpha}' - ,.]」

import java.util.regex.Pattern; 
public class Main { 
    public static void main(String[] args) { 
     String pattern = "[\\p{Alpha} '-,.]"; 
     //String text = "("; 
     String text = ")"; 
     System.out.print(Pattern.matches(pattern, text)); 
    } 
} 

回答

3

這是因爲'-,是interpeted的範圍,相當於'()*+,,試圖逃跑減號"[\\p{Alpha} '\\-,.]"

+0

我明白了。我已經擺脫了我的模式中的 - 符號。謝謝! –

0

只需雙擊逃脫)符號,

import java.util.regex.Pattern; 
public class Main { 
    public static void main(String[] args) { 
     String pattern = "[\\p{Alpha} '-,.]"; 
     //String text = "("; 
     String text = "\\)"; 
     System.out.print(Pattern.matches(pattern, text)); 
    } 
} 
+0

嗨阿維納什。這實際上工作。但我想知道爲什麼。順便說一下,謝謝! +爲這個解決方案。 –

+0

這是錯誤的。 'matches()'方法需要正則表達式匹配整個目標字符串,所以在這種情況下,它就好像正則表達式是'\ A [\ p {Alpha}',.] \ z'一樣。在關閉']後沒有'+'或'*',所以這個正則表達式只能匹配一個字符長的字符串。你爲目標字符串**添加了另一個字符**,所以當然它不再匹配。如果你使用'find()'而不是'matches()',你會發現它跳過'\'但仍然不正確地匹配')'。 –

+0

@AlanMoore感謝您的信息。如果他不在''''之前放置'\\',它會起作用嗎? –