2013-04-16 127 views
1

我有以下模式匹配器。模式匹配器

Pattern pat = Pattern.compile("[^a-z][^,.:;]"); 

如何在其中包含]字符本身?

+0

你並不需要逃避它(儘管你可以如果你想要,在實踐中沒有什麼不同),但是正則表達式考慮這種情況,並且有一種特殊的方式來對待它。檢查我的答案 –

回答

5

]是用來表示character class所以它需要的最後一個特殊字符進行轉義:

Pattern pat = Pattern.compile("[^a-z][^,.:;\\]]"); 
+0

@Reimeus,它並不需要轉義。檢查我的答案替代 –

+0

好點,但逃脫它意味着你不必記得把它作爲角色類中的第一個字符:) – Reimeus

1

您可以通過使用轉義字符\做像這樣\\].

0

你並不需要escap e it。在正則表達式中有一個特殊的規則,如果你想在列表中使用實際的]字符,它必須是它的第一個元素。它會工作得很好。給這個代碼試試:

public static void main(String[] args){ 
    String texto = "[]hello[]"; 
    Pattern p = Pattern.compile("[]]+"); 
    Matcher m = p.matcher(texto); 
    while(m.find()){ 
     System.out.println(m.group()); 
    } 
} 
0

的標準方法是使用Patternquote功能。此函數返回指定String的文字模式String。

String myLiteralString = Pattern.quote(",.[:;"); 
Pattern pat = Pattern.compile("[^a-z][^" + myLiteralString + "]"); 

此方法轉義正則表達式語法的所有特殊字符。