Java replaceAll失败,源字符串中有美元符号

时间:2017-02-10 20:13:40

标签: java regex

说我有以下代码

String test = "$abc<>";
test = test.replaceAll("[^A-Za-z0-9./,#-' ]", "");

测试现在是“$ abc”。

为什么要保留美元符号?

2 个答案:

答案 0 :(得分:11)

要保留的字符列表包括#-',其范围是从Unicode U + 0023(#符号)到U + 0027('符号),包括{ {1}}(U + 0024)。

如果您认为$被解释为三个字符的列表,请将其转义:

#-'

或将其放在列表的末尾:

test = test.replaceAll("[^A-Za-z0-9./,#\\-' ]", "");

答案 1 :(得分:7)

因为您必须将-作为角色类中的最后一个角色。

尝试

test.replaceAll("[^A-Za-z0-9./,#' -]", "");

它将起作用:))

另见In a java regex, how can I get a character class e.g. [a-z] to match a - minus sign?

Pattern的Javadoc(Ctrl-F&#34;字符类&#34;)

  

请注意,字符类中的一组不同的元字符在字符类外部生效。例如,正则表达式。在字符类中失去其特殊含义,而表达式 - 变成形成元字符的范围。