为什么此 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}"
));

原文由 Thomas Owens 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 889
2 个回答

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

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

原文由 butterchicken 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

-edit- 大声笑我发布了正确的答案并被否决然后我注意到 stackoverflow 转义了反斜杠所以我的答案看起来是错误的:)

原文由 willcodejavaforfood 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题