首页 > 解决方案 > 正则表达式模式未断言为真

问题描述

我正在尝试将以下字符串与我的 java 项目中的正则表达式模式进行比较:

2018-11-12 12:02:04.075

我已将上述字符串传递给在线正则表达式生成器以生成以下模式:

((?:2|1)\d{3}(?:-|\/)(?:(?:0[1-9])|(?:1[0-2]))(?:- |\/)(?:(?:0[1-9])|(?:[1-2][0-9])|(?:3[0-1]))(?:T|\ s)(?:(?:[0-1][0-9])|(?:2[0-3])):(?:[0-5][0-9]):(?: [0-5][0-9]))

下面是我的 ASSERT 语句,但是当我运行这个测试时,我得到一个断言错误:

assertTrue(rs.getString(this.columnName).matches("((?:2|1)\\d{3}(?:-|\\/)(?:(?:0[1-9])|(?:1[0-2]))(?:-|\\/)(?:(?:0[1-9])|(?:[1-2][0-9])|(?:3[0-1]))(?:T|\\s)(?:(?:[0-1][0-9])|(?:2[0-3])):(?:[0-5][0-9]):(?:[0-5][0-9]))"));

我需要进行哪些更改才能通过此测试?我的正则表达式有问题吗?

标签: javaregexassert

解决方案


您缺少毫秒部分。尝试这个:

((?:2|1)\\d{3}(?:-|\\/)(?:(?:0[1-9])|(?:1[0-2]))(?:-|\\/)(?:(?:0[1-9])|(?:[1-2][0-9])|(?:3[0-1]))(?:T|\\s)(?:(?:[0-1][0-9])|(?:2[0-3])):(?:[0-5][0-9]):(?:[0-5][0-9])\\.\\d{3})

推荐阅读