【问题标题】:Invalid escape sequence with my Regex我的正则表达式的转义序列无效
【发布时间】:2016-05-30 01:20:02
【问题描述】:

我的正则表达式不断得到无效的转义序列

private String mathA = "(\d)[ + ](\d)\\s=\?";

我删除了正则表达式的每一部分,但无论我拿出什么,它总是给我同样的错误。我想匹配“5 + 3 =?”其中 5 和 3 可以是任意数字。

【问题讨论】:

    标签: java regex


    【解决方案1】:

    您的表达式和代码中有一些错误。

    首先,您必须使用另一个反斜杠来转义反斜杠。此外,您正在使用字符类[...],因此如果您有[a e aaaa],则它只会匹配ae。所以,[ + ] 只会匹配空格或加号。

    您可以将代码更改为:

    private String mathA = "(\\d) [+] (\\d)\\s=\\?";
    // or escaping +
    private String mathA = "(\\d) \\+ (\\d)\\s=\\?";
    

    顺便说一句,如果你想匹配多个数字,你可以使用:

    private String mathA = "(\\d+) [+] (\\d+)\\s=\\?";
    

    【讨论】:

    • 谢谢你的帮助,我以为我终于掌握了正则表达式的窍门,但我想没有。
    • @TeenCoder 很高兴为您提供帮助。我已经通过一些解释性更改更新了答案
    【解决方案2】:

    Java 在字符串中特别对待字符\\。该字符被视为转义符,以允许将新行表示为\n。要在字符串中获取文字反斜杠,您需要使用两个反斜杠\\\\

    发生错误是因为 Java 看到了,例如 \\d,但不知道如何处理它。

    还要确保您的 \\\\ 变为 \\\\\\\\ 以规避正则表达式使用相同的转义字符来获得文字反斜杠这一事实。代码中的四个反斜杠 = 字符串中的 2 个 = 匹配中的 1 个文字反斜杠。

    另外,? 不应该被转义,你不想要文字问号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-12
      • 2018-02-15
      • 1970-01-01
      • 2021-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多