2016-12-13 69 views
2

我有以下程序更換特殊的字符在Java否定嵌套類如何正則表達式否定

 String a = "fgA9.^"; 
     String b =""; 
     a = a.replaceAll("[^[a-zA-Z0-9]]", b); 
     System.out.println(a); 

此打印(^)作爲輸出,但我希望正則表達式否定的字母,數字和更換特殊字符。

我可以看到a = a.replaceAll("[[^a-zA-Z0-9]]", b);

就是兩者之間的區別我的預期輸出,在這兩種情況下,我使用的否定?

+0

您使用了角色類聯合。 –

回答

2

隨着嵌套字符類,您創建了一個union

您還可以使用工會創建由兩個或多個獨立的字符類的單個字符類。要創建一個聯盟,只需將一個類嵌套在另一個類中,如[0-4[6-8]]。這個特定的聯合創建一個匹配數字0,1,2,3,4,6,78的單個字符類。

的正則表達式"[^[a-zA-Z0-9]]"匹配的字母數字字符作爲圖案由[^](空聯合在一起部被忽略)和[a-zA-Z0-9]匹配ASCII字母和數字。

[[^a-zA-Z0-9]]模式中,您指定了否定字符類別[^a-zA-Z0-9],它匹配任何字符,但是與ASCII字母/數字匹配,並且與空白部分相結合,再次忽略。

[0-4[6-8]]正則表達式是完全語義上等同於[0-46-8],並且可以在否定和正字符類組合而觀察到的更實際的聯合值。例如。 [^\p{L}[a-c]]+將匹配除字母([^\p{L}])和三個小寫字母a,bc字符以外的一個或多個字符。