正则表达式中将不需要替换的字符也替换了

输入字符串:"Never mistake silence//| for ignorance, calmness!@#$%^&~for acceptance, or |.*.kindness for weakness.";

已知字符串中会存在/|~!@#$%^&*();:_+-[]这些字符,要求将上面字符串中存在的字符都替换成空格。
最后期望输出是:"Never mistake silence\ \ for ignorance, calmness for acceptance, or . .kindness for weakness."
我的代码如下:

public class Test {
    public static void main(String[] args) throws ParseException {
        String str = "\"Never mistake silence\\/\\/| for ignorance, calmness!@#$%^&~for acceptance, or |.*.kindness for weakness.\"";
        String pattern = "[]/\\\\|~!@#$%\\\\^&*();:_+-[\\\\]]+";
        String newStr=str.replaceAll(pattern,"");
        System.out.println(newStr);


    }
}


最后输出的是:

"Never mistake silence for ignorance, calmnessfor acceptance, or ..kindness for weakness."

看了半天没看出来为啥silence后面的\ \为啥也会被替换掉呢?我的正则表达式中没有体现反斜杠这个字符啊?

分析一下patter中的“\\\\”
第一个斜杠是转义符,第二个斜杠是斜杠本身,第三个斜杠是转义符,第四个斜杠是斜杠本身。

可以改一下正则吗?用下面这个

String pattern = "[]/|~!@#$%\\^&*();:_+\\-\\[\\]]+";