2015-12-23 92 views
0

我有一個相當簡單的正則表達式,它不會完成我期望的功能。正則表達式匹配它不應該匹配的東西?

我想要一個RegEx匹配單個字母的字符串,如果它們是您在smilies中常見的幾個元素之一,例如括號,冒號等

我偶然發現一個問題使我RegEx火,我不明白爲什麼。

我對Java的8(Oracle)和具有JUnit測試對於我的問題:

@Test 
public void test(){ 
    assertFalse(Pattern.matches("[:;-pP8xXdD\\(\\)]", "?")); 
} 

應該評估爲假,但它相匹配,爲什麼呢?

+1

我認爲你需要逃避'-'。否則,它認爲這是一個範圍。 –

回答

4

;-p部分定義了從;(59)到p(112)的ASCII字符的範圍。這包括?(63)。 Reference

要解決該問題,請將-置於字符組的起始/結尾處([]),或使用\進行退出。

+0

是的,它應該是'\\ - ',因爲'-'是一個特殊的字符,表示範圍 – gtgaxiola

相關問題