2011-02-06 253 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("[%\\\\,\\[\\]#&@!^]", "");