2012-04-25 35 views
0

有没有办法缩短以下格式以查找格式为HH:MM:SS?缩短HH:MM的正则表达式:SS

'^[0-6][0-9]:[0-6][0-9]:[0-6][0-9]$' 
+0

据推测HH应该限制在<24? – 2012-04-25 00:52:12

+0

这对这个很好。它与媒体的运行时间有关。 – David542 2012-04-25 00:53:46

回答

2

如果有的话,它应该是更长的时间,因为69:69:69没有意义的时间。

([01]\d|2[0-3]):([0-5]\d|60):([0-5]\d|60) 
allow 00-23  00-59 and 60 00-59 and 60 
       ~~~~~~~~~~~~~~~~~~~~~~~~~ 
       60 is useful for supporting leap seconds 

如果你真的想你的榜样,但较短,你可以做到这一点:

[0-6]\d(:[0-6]\d){2} 
    ~~   ~~~ 
     |   exactly two repetitions of preceding() block 
     Matches digits in many regex implementations 
1

假设你不需要做值的验证,但只找到的东西,看起来像次,如何只:

\d{1,2}:\d{2}:\d{2} 

如果您正在搜索通过文字来找到你真的不希望在^$ u到锚定值如果你的正则表达式具有那些匹配的开始和结束行,并且你的源数据有它们自己的行。

+0

你能解释一下你的意思吗?“除非你的正则表达式匹配在行首和行尾”,否则你不需要在^和$处锚定? – David542 2012-04-25 09:21:50

+0

如果你有文本''从11:22:33开始''并且使用正则表达式'/^\ d {2}:\ d {2}:\ d {2} $ /'来测试或扫描它,结果将是“不匹配”。如果您有以下文本:'“Times:\ n11:22:33 \ n44:55:66 \ nOK”'并且您使用相同的正则表达式来扫描JavaScript中的匹配项,您将得不到匹配项;在Ruby中,相同的正则表达式会返回两个匹配,因为在Ruby中'^'表示“起始行”,而不是“字符串开始”(而“$'是”行尾“,而不是”字符串结束“) 。 – Phrogz 2012-04-25 12:54:03