IntelliJ 说“\\”(匹配单个反斜杠)是 Pattern.compile 的非法/不受支持的转义序列

Mau*_*ren 8 java regex intellij-idea

以下模式编译表达式在 IntelliJ 中出错,即使该表达式在 Java (1.8) 中编译并运行良好:

Pattern.compile("\\", Pattern.LITERAL);
Run Code Online (Sandbox Code Playgroud)

我正在使用以下代码来转义\String 中所有出现的 double \\,如下所示:

private final static Pattern BACKSLASH_PATTERN = Pattern.compile("\\", Pattern.LITERAL);
private final static String BACKSLASH_REPLACE = Matcher.quoteReplacement("\\\\");

private String escapeBackslashes(final String s) { 
    return BACKSLASH_PATTERN.matcher(s).replaceAll(BACKSLASH_REPLACE);
}
Run Code Online (Sandbox Code Playgroud)

s.replace("\\", "\\\\")不过,使用IntelliJ 时不会抱怨,但出于性能原因(要处理 100 MB 的数据),我需要使用预编译模式。

可能是一个错误,因为 IntelliJ 说 \b (退格)是字符串文字中的非法转义序列。为什么??

Kie*_*eli 2

你那里有双重转义问题。Java 需要两个反斜杠 \ 才能使字符串中出现一个反斜杠。正则表达式还具有反斜杠转义功能,以便正则表达式中的两个反斜杠成为模式匹配的一个反斜杠。

尝试转义两次:

Pattern.compile("\\\\", Pattern.LITERAL);
Run Code Online (Sandbox Code Playgroud)

这会将模式作为正则表达式中的“\”来匹配单个退格键。