2012-04-25 50 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