【发布时间】:2018-11-27 09:06:54
【问题描述】:
以下模式编译表达式在 IntelliJ 中会出错,即使该表达式在 Java (1.8) 中编译并运行良好:
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? 中的错误?
【问题讨论】:
-
IntelliJ 在检查 regex 参数时似乎没有考虑 regex 选项。
-
manfromnowhere:我不想禁用 IntelliJ 中的正则表达式检查器,正如答案所暗示的那样,我也不能通过提取字符串变量并使用 @org.intellij 对其进行注释来使用“hack” .lang.annotations.Language("TEXT") 注释,因为我的 Java 文件在运行时无法访问该注释,因此程序会失败。
-
你实际上有两个转义:string-escape 和 regexp-escape。字符串 "\\" 是一个包含一个字符 '\' 的字符串,它不是有效的正则表达式转义。如果您想找到一个正则表达式转义的 '\',请使用 "\\\\"
-
v2019.1.3。我收到这个错误。只需
String a = "some\\thing"; String[] b = a.split("\\");即可复制
标签: java regex intellij-idea