即使该表达式在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?中的错误吗?
答案 0 :(得分:1)
您在这里遇到了两个转义问题。 Java需要两个反斜杠\才能在字符串中出现一个反斜杠。正则表达式也有反斜杠转义,因此正则表达式中的两个反斜杠成为用于模式匹配的一个反斜杠。
尝试转义两次:
Pattern.compile("\\\\", Pattern.LITERAL);
这会在与单个退格符匹配的正则表达式中将模式设置为'\'。