日期和军事时间的Java正则表达式失败

时间:2013-02-11 20:12:25

标签: java regex

我正在尝试构建一个支持日期时间的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与正则表达式不匹配。任何正则表达的大师都可以找到原因吗?提前谢谢。

1 个答案:

答案 0 :(得分: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日期字符串的适当模式。