Java 导致模式语法异常的正则表达式

Java 导致模式语法异常的正则表达式,java,regex,Java,Regex,我正在尝试创建一个#replaceAll regex来归档某些字符 我尝试了以下方法 msg.replaceAll("[^\\w~!@#$%^&*()-=_+`[]{}\\|:;'\"<>,./\\]", ""); msg.replaceAll(“[^\\w~!@$%^&*()-=”[+`[]{}\\\\\:“\”,./\\],”); 但它给了我这个错误 INFO Caused by: java.util.regex.PatternSyntaxException: Unc

我正在尝试创建一个#replaceAll regex来归档某些字符

我尝试了以下方法

msg.replaceAll("[^\\w~!@#$%^&*()-=_+`[]{}\\|:;'\"<>,./\\]", "");
msg.replaceAll(“[^\\w~!@$%^&*()-=”[+`[]{}\\\\\:“\”,./\\],”);
但它给了我这个错误

INFO Caused by: java.util.regex.PatternSyntaxException: Unclosed character class near index 36
07.09 00:07:24 [Server] INFO [^\w~!@#$%^&*()-=_+`[]{}\|:;'"<>,./\]
07.09 00:07:24 [Server] INFO ^
由以下原因引起的信息:java.util.regex.PatternSyntaxException:索引36附近的未关闭字符类
07.09 00:07:24[服务器]信息[^\w~!@$%^&*()-=[uU+`[]{}\\\:;'”,./\]
07.09 00:07:24[服务器]信息^

我尝试过在线搜索,但不知道我到底做错了什么。

对于您的正则表达式,您已经在最后一个
]
之前添加了
\\
,并且在第一个
[
中没有转义,而且在将其更改为之后,您还需要转义
-

[^\w~!@#$%^&*()\-=_+`\[\]{}\|:;'\"<>,./]
[^\w~!@$%^&*()\-=\u+`\[\]{}\\\\\:“\”,./]
它在我这边很好用

msg = msg.replaceAll("[^\\w~!@#$%^&*()\\-=_+`\\[\\]{}\\|:;'\\\"<>,./]", "");
msg=msg.replaceAll(“[^\\w~!@$%^&*()\-=”\\\\\\\\[\\\]{}\\\\\\\\\:;“\\\\”,./]”,“);

我的猜测是,可能这个表达式是需要的或接近于一个:

import java.util.regex.Matcher;
import java.util.regex.Pattern;


public class re{

    public static void main(String[] args){


        final String regex = "[^\\w~!@#$%^&*()=_+`\\[\\]{}|:;'\"<>,.\\\/-]";
        final String string = "ábécédééefg";
        final String subst = "";

        final Pattern pattern = Pattern.compile(regex);
        final Matcher matcher = pattern.matcher(string);

        final String result = matcher.replaceAll(subst);

        System.out.println(result);

    }
}

如果您希望探索/简化/修改该表达式,它已被删除 在的右上面板上进行了说明 .如果你愿意,你可以 也可以观看,它将如何匹配 对照一些样本输入



您需要转义
-
[
]
在角色内部class@Nick我用一个\或两个\\单\转义应该足够了。java不是100%确定,但我认为是两个。@Nick它告诉我“无效转义序列”这是有效的,但出于某种原因它不能将“\\@Dan替换为“\\”。你需要转义它自己,这不是“\\\”的方式吗?@你需要使用“\\\\\\\”四个吗反斜杠而不是BTW它不是“在最后一个
]
之前”-不应转义最后一个,因为关闭
[]
模式(示例/代码是正确的(在这方面))。请注意:
regex101
没有Java风格,可能有一些细微的差异
bcdefg