正則表達式匹配日期,支持閏年,格式爲YYYYMMDD

年份:[\d]{4}正則表達式

帶31的月份:(0[13578]|1[02])((0[1-9])|([12][0-9])|(3[01]))
非2月不帶31日的月份:((0[469])|11)((0[1-9])|([12][1-9])|30)
平年2月份 : 02((0[1-9])|(1[0-9])|(2[1-8]))
閏年2月份:02((0[1-9])|(1[0-9])|(2[1-9]))優化

閏年月份:
((0[13578]|1[02])((0[1-9])|([12][0-9])|(3[01])))|(((0[469])|11)((0[1-9])|([12][1-9])|30))|(02((0[1-9])|(1[0-9])|(2[1-9]))).net

平年月份:
((0[13578]|1[02])((0[1-9])|([12][0-9])|(3[01])))|(((0[469])|11)((0[1-9])|([12][1-9])|30))|(02((0[1-9])|(1[0-9])|(2[1-8])))blog

平年年份和月份,這個月份2月只有28號,若是出現0229這種日期就交給閏年帶月份的正則表達式進行匹配,2個表達式用或鏈接get

[\d]{4}(((0[13578]|1[02])((0[1-9])|([12][0-9])|(3[01])))|(((0[469])|11)((0[1-9])|([12][1-9])|30))|(02((0[1-9])|(1[0-9])|(2[1-8]))))文件


閏年年份:
第一種:能被100整除,也能被400整除 0400 0800 1200 1600 2000 2400 2800 3200 3600 4000 4400 4800 5200 5600 6000 6400 6800 7200 7600 8000 8400 8800 9200 9600
(([02468][048])|([13579][26]))00時間

第二種 :不能被100整除,但能被4整除 04 08 12
[0-9]{2}(([02468][048])|([13579][26]))co


閏年年份和月份:
(((([02468][048])|([13579][26]))00)|([0-9]{2}(([02468][048])|([13579][26]))))(((0[13578]|1[02])((0[1-9])|([12][0-9])|(3[01])))|(((0[469])|11)((0[1-9])|([12][1-9])|30))|(02((0[1-9])|(1[0-9])|(2[1-9]))))360


總表達式:
([\d]{4}(((0[13578]|1[02])((0[1-9])|([12][0-9])|(3[01])))|(((0[469])|11)((0[1-9])|([12][1-9])|30))|(02((0[1-9])|(1[0-9])|(2[1-8])))))|((((([02468][048])|([13579][26]))00)|([0-9]{2}(([02468][048])|([13579][26]))))(((0[13578]|1[02])((0[1-9])|([12][0-9])|(3[01])))|(((0[469])|11)((0[1-9])|([12][1-9])|30))|(02((0[1-9])|(1[0-9])|(2[1-9])))))ps

 

     必定要注意正則表達式鏈接起來的時候每一個正則表達式都要在外層加個括號,這樣就能保證鏈接起來的時候優先級不會改變,雖然這個整個表達式一眼看省去很難看,可是仍是能達到驗證的目的的,時間有限,就沒去優化了,我估計仍是有優化的空間的,我作這個,只是爲了判斷一個文件的文件名的名稱是否合法,這個文件的名字中就帶有日期,因此。。。。

原文:https://blog.csdn.net/lu188887/article/details/7421857

相關文章
相關標籤/搜索