【问题标题】:Why does this Java regex cause "illegal escape character" errors?为什么这个 Java 正则表达式会导致“非法转义字符”错误?
【发布时间】:2010-11-25 15:18:02
【问题描述】:

我正在尽我所能使用正则表达式处理solution to a previous question。我的模式是

"\d{4}\w{3}(0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]){2}"

根据 NetBeans,我有两个非法转义字符。我猜它与\d 和\w 有关,但它们在Java 中都是有效的。也许我的 Java 正则表达式语法不可用...

涉及的整行代码是:

userTimestampField = new FormattedTextField(
  new RegexFormatter(
    "\d{4}\w{3}(0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]){2}"
));

【问题讨论】:

  • 该模式对 java 来说是绝对合法的,它在 eclipse 中工作。抱歉,我不使用 NetBeans。
  • 有趣。我将整行代码添加到我的问题中,即使出现错误,我也会尝试构建......让我们看看会发生什么。
  • 你在字符串中使用它,想想用 \\d 和 \\w 转义 \d 和 \w

标签: java regex


【解决方案1】:

假设这个正则表达式在 Java String 文字中,您需要为您的 \d\w 标签转义反斜杠:

"\\d{4}\\w{3}(0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]){2}"

坦率地说,当你想匹配反斜杠时,这会变得更多,好吧,bonkers

public static void main(String[] args) {        
    Pattern p = Pattern.compile("\\\\\\\\"); //ERM, YEP: 8 OF THEM
    String s = "\\\\";
    Matcher m = p.matcher(s);
    System.out.println(s);
    System.out.println(m.matches());
}

\\ //JUST TO MATCH TWO SLASHES :(
true

【讨论】:

    【解决方案2】:

    你试过"\\d""\\w"吗?

    -编辑- 大声笑,我发布了正确的答案并被否决了,然后我注意到 stackoverflow 转义了反斜杠,所以我的答案似乎是错误的 :)

    【讨论】:

    • 在我看来,您因为没有有效利用 SO 的代码格式化功能而被否决。 ;)
    【解决方案3】:

    以下内容呢:\\d{4}\\w{3}(0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]){2}

    【讨论】:

    • 这消除了错误...让我们看看它是否真的可以用作正则表达式。
    • 它似乎正在工作。 +1。但是,我接受了奶油鸡的回答,因为它更深入。不过,感谢您的帮助。
    【解决方案4】:

    你试过了吗?

    \\d{4}\\w{3}(0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]){2}
    

    【讨论】:

      【解决方案5】:

      你需要做的就是把

       *\
       ex: string ex = 'this is the character: *\\s';
      

      在您的无效字符之前而不是 8 \ !!!!!

      【讨论】:

        【解决方案6】:

        我认为您需要将两个转义的快捷方式添加到字符类中。试试这个:"[\d]{4}[\w]{3}(0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]){2}"

        --祝你好运。

        【讨论】:

        • @MystikSpiral: \d\w 字符类。它们分别是预定义字符类[0-9][A-Za-z0-9_]简写(不是“快捷方式”)。括号是多余的,除非您组合使用它们,例如 [\d\s][\w,.!?]
        猜你喜欢
        • 2020-11-30
        • 1970-01-01
        • 2013-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-21
        • 2010-09-22
        • 1970-01-01
        相关资源
        最近更新 更多