【问题标题】:IntelliJ says "\\" (match on single backslash) is an illegal / unsupported escape sequence for Pattern.compileIntelliJ 说“\\”(匹配单个反斜杠)是 Pattern.compile 的非法/不受支持的转义序列
【发布时间】: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


【解决方案1】:

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

尝试转义两次:

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

这会将模式作为 '\' 放在匹配单个退格的正则表达式中。

【讨论】:

  • 而且你不需要LITERAL,因为(转义的)反斜杠在正则表达式中没有特殊含义。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多