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