2011-02-06 144 views
2

我要替換這些字符中的任何一個:Java的正則表達式

% \ , [ ] # & @ !^

...空字符串( 「」)。

我用這個代碼:

String line = "[ybi-173]"; 
Pattern cleanPattern = Pattern.compile("%|\\|,|[|]|#|&|@|!|^"); 
Matcher matcher = cleanPattern.matcher(line); 
line = matcher.replaceAll(""); 

但它不工作。

我在這個正則表達式中想念什麼?

+0

您可能需要轉義所有特殊字符,而不是`\` – 2011-02-06 18:30:11

回答

3

有幾個原因導致您的解決方案無法正常工作。

您希望匹配的幾個字符在正則表達式中具有特殊含義,包括^[]。這些必須以\字符進行轉義,但是更糟糕的是,\本身必須轉義,以便Java編譯器將\傳遞給正則表達式構造函數。因此,總結第一步,如果您希望匹配]字符,則Java字符串必須看起來像"\\]"

但是,此外,對於字符類別[]而言,這是一種情況,而不是交替操作符|。如果你想匹配任何字符a,b,c,看起來像[abc]你的角色類將是[%\,[]#&@!^],但是,由於Java字符串轉義規則和某些字符的特殊含義,你的正則表達式將是[%\\\\,\\[\\]#&@!\\^]

4

某些字符是被解釋不同的特殊字符。您可以逃脫他們都用反斜槓,或更好,但把它們放在一個字符類(不需要逃避非CC人物,簡化了可讀性):

Pattern cleanPattern = Pattern.compile("[%\\\\,\\[\\]#&@!^]"); 
+1

由於[] – Ido 2011-02-06 18:33:01

+0

它不起作用,您必須在字符類中轉義文字`[`和`]` 。 – codaddict 2011-02-06 18:33:46

0

你會定義圖案,文字組附在[]之後並逃離特殊字符,例如

String n = "%\\,[]#&@!^".replaceAll("[%\\\\,\\[\\]#&@!^]", "");