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

时间:2009-09-04 13:17:13

标签: java regex

我正在使用正则表达式尽可能地使用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}"
));

6 个答案:

答案 0 :(得分:60)

假设此正则表达式位于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

答案 1 :(得分:6)

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

答案 2 :(得分:4)

您是否尝试过"\\d""\\w"

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

答案 3 :(得分:1)

你试过这个吗?

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

答案 4 :(得分:0)

你需要做的就是把

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

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

答案 5 :(得分:-1)

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

- 祝你好运。