我正在嘗試創建特定日期的正則表達式。它正確處理7am
和11:34pm
。它應該能夠識別不合時宜的時代。現在我已經嘗試爲這個問題寫一個工作正則表達式。一天中的時間的正則表達式
正則表達式^(([0]?[0-9])|([1][0-2]))(\:[00-59]{2})?(am|pm){1}\b
的問題是,在antemeridiem,小時部分從1
(或01
)至12
變化的,但在它postmeridiem從0
(或00
)變化到12
。我無法推斷出這種情況的正則表達式。請幫助。
我正在嘗試創建特定日期的正則表達式。它正確處理7am
和11:34pm
。它應該能夠識別不合時宜的時代。現在我已經嘗試爲這個問題寫一個工作正則表達式。一天中的時間的正則表達式
正則表達式^(([0]?[0-9])|([1][0-2]))(\:[00-59]{2})?(am|pm){1}\b
的問題是,在antemeridiem,小時部分從1
(或01
)至12
變化的,但在它postmeridiem從0
(或00
)變化到12
。我無法推斷出這種情況的正則表達式。請幫助。
我不打算開始爭論什麼12小時的系統應該是一樣的,但只是用你的要求給出/固定:
問題是,在antemeridiem中,小時部分從1(或01)到12變化,但在postmeridiem中,它從0(或00)到12變化。我無法推導出這種情況下的正則表達式。請幫助。
然後,這個正則表達式應該工作:
^(((0?[1-9]|1[012])(:[0-5][0-9])?am)|((0?[0-9]|1[012])(:[0-5][0-9])?pm))\b
見自己here。
不錯的+1我:) – HamZa 2013-02-21 14:13:44
因爲我和其中一個人進行了非常激烈的談話。我對此表示歉意。現在我意識到我問的問題其實是錯誤的。這仍然是我的「錯誤」問題的答案。 – 2013-02-21 14:50:02
你總是可以這樣做:
(我的正則表達式時)| (我的正則表達式)
只要你有你的括號在正確的地方,它應該工作得很好。
嘗試這樣:
^(0?[1-9]|1[0-2])(:([0-5]?[0-9]))?(am|pm)$
這應該符合您的要求。
^(([0]?[0-9])|([1][0-2])){1}(\:)?([0-5][0-9])?(am|pm){1}
而且,你要使用正則表達式匹配數字
[00-59]
,我不認爲它的工作原理是這樣,你匹配的字符串,最好是用[0-5] [0-9]代替。
我想爲此找到一個好的正則表達式。我使用了一種叫做快報工具,並通過以下公式進行12小時的時間匹配上前:
((1{0,1}[012]{1})|[0-9]{1}){1}((:|\s)?[0-5]{1}[0-9]{1})?((a|p|A|P){1}(m|M){1})?
我對以下數據進行測試:
12:00
12am
11111111PM
pm
11122am
13
00am
9a
和表達想出了下面的比賽:
12:00
12am
1111
1111PM
1112
2am
1
3
0
0am
9
如果您正在驗證數據並比較匹配數據長度,則可以丟棄從11111111PM
和中找到的部分匹配。這對我有用。
'[0-12]'只匹配'0','1'或'2'。正則表達式匹配文本,而不是數字。與[00-59]相同,匹配0,1,2,3,4,5或9。 – 2013-02-21 12:41:22
@TimPietzcker我改變了表情。 – 2013-02-21 12:50:07
我猜測@TimPietzcker解釋說,字符類'[]'中的範圍只匹配文本(或字符),另一個使得這個非常簡單的規則就是:範圍只能**只包含兩個字符,其他角色將分開匹配。例如'[0-9]'匹配字符* 0 *到* 9 *,但由於前面解釋過的規則'[0-90]'從未匹配從* 0 *到* 90 *。 – kjetilh 2013-02-21 13:06:38