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

时间:2018-11-27 09:06:55

标签: java regex intellij-idea

即使该表达式在Java(1.8)中可以编译并正常工作,以下模式编译表达式也会在IntelliJ中产生错误:

Pattern.compile("\\", Pattern.LITERAL);

我正在使用以下代码来转义带有双\的字符串中所有\\的出现,就像这样:

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);
}

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

可能是IntelliJ says \b (backspace) is an illegal escape sequence inside a string literal. Why?中的错误吗?

1 个答案:

答案 0 :(得分:1)

您在这里遇到了两个转义问题。 Java需要两个反斜杠\才能在字符串中出现一个反斜杠。正则表达式也有反斜杠转义,因此正则表达式中的两个反斜杠成为用于模式匹配的一个反斜杠。

尝试转义两次:

Pattern.compile("\\\\", Pattern.LITERAL);

这会在与单个退格符匹配的正则表达式中将模式设置为'\'。