为了账号安全,请及时绑定邮箱和手机立即绑定

为什么不同的字符串与模式匹配?

为什么不同的字符串与模式匹配?

隔江千里 2022-12-21 10:04:10
我正在使用 Java 1.7。我预计:Pattern ddmmyyyyPattern = Pattern.compile("(\\d{1,2}[- /.]\\d{1,2}[- /.]\\d{4})");应匹配至少出现 2 次分隔符 -/ 的字符串。但是,以下是匹配的07 2.3180, 45 3.3183, 19 4.3183, 77 5.3025, 25 6.3023.此外,9507 2.31 与Pattern yyyymmddPattern = Pattern.compile("(\\d{4}[- /.]\\d{1,2}[- /.]\\d{1,2})");请帮助我纠正模式!
查看完整描述

3 回答

?
HUH函数

TA贡献1836条经验 获得超4个赞

发生这种情况是因为字符类也匹配一个空格。

您可以使用带有反向引用的捕获组来匹配date like模式。请注意,它不会验证日期本身。

\d{1,2}([-/.])\d{1,2}\1\d{4}

关于图案

  • \d{1,2}匹配 1 或 2 个数字

  • ([-/.])在组中捕获匹配 - / 或 .

  • \d{1,2}匹配 1 或 2 个数字

  • \1对第 1 组中捕获的内容的反向引用(因此 12/12-2019 将不匹配)

  • \d{4}匹配 4 位数字

在爪哇中:

String regex = "\\d{1,2}([-/.])\\d{1,2}\\1\\d{4}";

正则表达式演示Java演示

请注意,对于匹配,您可以省略外括号。


查看完整回答
反对 回复 2022-12-21
?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

您需要从字符类中删除空格

\\d{1,2}[- /.]\\d{1,2}[- /.]\\d{4}
        ^             ^

改成这个

\\d{1,2}[-/.]\\d{1,2}[-/.]\\d{4}


查看完整回答
反对 回复 2022-12-21
?
函数式编程

TA贡献1807条经验 获得超9个赞

试试这个模式:

\d{1,2}([-\/.])\d{1,2}([-\/.])\d{4}

当然,应该从正则表达式中删除空格,并且字符“/”之前需要有一个反斜杠才能被识别。


查看完整回答
反对 回复 2022-12-21
  • 3 回答
  • 0 关注
  • 123 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号