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

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

"\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 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}" 

坦率地说,当你想匹配反斜杠时,这会得到更多的好消息:

 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 

以下是什么: \\d{4}\\w{3}(0[1-9]|[12][0-9]|3[01])([01][0-9]|2[0-3])([0-5][0-9]){2}

你试过这个吗?

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

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

-edit-大声笑我发布了正确的答案并投了票然后我注意到stackoverflow逃避反斜杠所以我的答案出现了错误:)

所有你需要做的就是放

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

在你的无效角色之前而不是8 \ !!!!!

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

– 祝好运。