说我有以下代码
String test = "$abc<>";
test = test.replaceAll("[^A-Za-z0-9./,#-' ]", "");
测试现在是“$ abc”。
为什么要保留美元符号?
答案 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;)
请注意,字符类中的一组不同的元字符在字符类外部生效。例如,正则表达式。在字符类中失去其特殊含义,而表达式 - 变成形成元字符的范围。