0

我正在尝试构建一个支持日期时间的 Java 正则表达式(其中时间组件是军事时间):

MM/dd/YYYY HH:mm:ss

@Test
public void testRegexPattern() {
    String regex = "([0-9]{2})/([0-9]{2})/([0-9]{4}\\s^([01]\\d|2[0-3]):?([0-5]\\d):?([0-5]\\d)$)";

    String supposedDateTime = "12/31/1969 19:00:00";

    Assert.assertTrue(supposedDateTime.matches(regex));
}

此测试失败,因为supposedDateTime与正则表达式不匹配。任何正则表达式大师都可以发现为什么吗?提前致谢。

4

1 回答 1

3

为什么你caret(^)在中间\\s呢?去掉它。这就是造成问题的原因。此外,使用String#matches方法,您甚至不需要使用anchors.

所以,你可以使用这个正则表达式:

"([0-9]{2})/([0-9]{2})/([0-9]{4}\\s([01]\\d|2[0-3]):?([0-5]\\d):?([0-5]\\d))"

讨论了正则表达式中的实际问题后,您真的不应该使用正则表达式测试日期。而是对日期字符串使用SimpleDateFormat适当的模式。parse

于 2013-02-11T20:15:43.623 回答