在Java .replaceAll方法中转义一长串元字符

问题描述 投票:0回答:2

我一直试图解决这个问题一段时间,我正在使用.replaceAll删除字符串中不是字母或数字的任何字符。我尝试使用Pattern.quote(),但我无法使其正常工作。然后我尝试使用\ Q和\ E,但它仍然无法工作,即使我对不同数量的反斜杠进行了挫败尝试。这是我第一次尝试以这种方式逃脱,所以任何帮助都会非常感激。

这是有问题的一行:

return input.toLowerCase().replaceAll("\\Q !"#$%&'()*+,-./:;<=>?@[]\^_`~{}|\\E","");
java regex escaping replaceall metacharacters
2个回答
1
投票

这里一个简单的解决方法是将所有特殊字符放在一个字符类中:

String input = "abc%#$123";
input = input.toLowerCase().replaceAll("[!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`~{}|]","");
System.out.println(input);

abc123

角色类承认您的大多数特殊字符为未转义的文字。例外是双引号,反斜杠和开/关方括号,但仍然需要转义。

Demo

注意:删除任何非字母数字的内容可能要容易得多,例如:

input = input.replaceAll("[^A-Za-z0-9]", "");

但是也许有上面会排除的字符,但你真的想保留。


0
投票

return input.toLowerCase()。replaceAll(“[^ A-Za-z0-9()\ [\]]”,“”);

资料来源:How to remove invalid characters from a string?

© www.soinside.com 2019 - 2024. All rights reserved.