为什么这个Java正则表达式导致"非法转义字符"错误?

Tho*_*ens 28 java regex

我正在使用正则表达式尽可能地解决上一个问题的解决方案.我的模式是

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

根据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}"
));
Run Code Online (Sandbox Code Playgroud)

but*_*ken 64

假设此正则表达式位于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}"
Run Code Online (Sandbox Code Playgroud)

这得到更多,那么,疯狂坦率地说,当你要匹配反斜线:

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
Run Code Online (Sandbox Code Playgroud)


wil*_*ood 6

你有没有尝试"\\d"和"\\w"?

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

  • 在我看来,你因为没有有效利用 SO 的代码格式化功能而受到了反对。;) (3认同)

asa*_*n74 6

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

  • 它似乎正在发挥作用。+1。然而,我接受了butterchicken的回答,因为它更深入。不过还是谢谢你的帮助。 (2认同)