寫一個驗證時間格式的正則表達式

今天晚上單位測試問了我這道題疚沐。寫的挺慢的待锈。正式面試問的話應該已經(jīng)掛了格遭。
我這里要滿足的時間格式 XXXX-XX-XX

分析

先想想閏年有幾種情況
  1. 能被4整除
    并且
  2. 當能被100整除的時候罩抗,必須能被400整除求摇,所以1600可以窍荧,但1500就不行辉巡。
先看最特殊的閏年-被400整除

用最笨的方法找規(guī)律。
0000蕊退,0400郊楣,0800憔恳,1200,1600
2000净蚤,2400钥组,2800,3200今瀑,3600
4000程梦,4400,4800橘荠,5200屿附,5600
得到的規(guī)律就是
在第一位是0,2,4,6,8時第二位可以是0,4,8
在第一位是1,3,5,7,9時,第二位可以說2,6
那我們得到的第一種情況的年份的正則表達式應該是
([02468][048]00) | ([13579][26]00)

再來看第二種情況的閏年-能被4整除哥童,且不是100的倍數(shù)

還是先找規(guī)律
0000挺份,0004,0008贮懈,0012匀泊,0016
0020,0024朵你,0028各聘,0032,0036
0040抡医,0044躲因,0048,0052魂拦,0056
那對應的規(guī)律可以說是
前兩位隨意毛仪,第三位是0,2,4,6,8時。對應的第四位0芯勘,4箱靴,8
第三位是1,3,5時,對應的第四位是2,6
那第二種年份的正則表達式是
([0-9]{2}) (([02468][048]) | [13579][26])

到這里荷愕,閏年的情況就討論完了衡怀。

第三種是任意的四個數(shù)字 [0-9]{4}

在正則表達式里,這三種情況的排序應該是從最特殊到最一般安疗。也就是上文提到的排序抛杨。

然后考慮月份

1,3,5,7,8,10,12月對應的是31天,對應的表達式 (-xx-xx格式)

  • (0[13578]) | (1[02]) - ((0[1-9]) | ([12][0-9]) | (3[01]))
    同樣荐类,4,6,9,11月對應的是30天
    -((0[2469]) | (11))- ((0[1-9]) | ([12][0-9]) | (30))
    最后對于二月
    閏年: (-02-((0[1-9]) | ([12][0-9]))
    平年:(-02-((0[1-9]) | (1[0-9] | 2[0-8]))

然后把月份和年份的表達式組合起來
特殊閏年+閏年月日 | 普通閏年 + 閏年月日 | 普通年 + 普通月日
這一步其實很麻煩怖现。會有很多的括號需要調(diào)整,感覺半個多小時的時間都浪費在這上頭了

得到的代碼是這樣的(不一定對,簡單測一下好像還行)

public class TimePattern {
    public static void main(String[] args ) {
        String pattern =
                "((([02468][048]00)|([13579][26]00))" +
                        "(-02-((0[1-9])|([12][0-9])))|" +
                        "(-((0[13578])|(1[02]))-((0[1-9])|([12][0-9])|(3[01])))|" +
                        "(-(0[469]|11)-((0[1-9])|([12][0-9])|30)))"

                        + "|" +
                "(([0-9]{2})([02468][048]|[13579][26])" +
                        "((-02-((0[1-9])|([12][0-9])))|" +
                        "(-((0[13578])|(1[02]))-((0[1-9])|([12][0-9])|(3[01])))|" +
                        "(-(0[469]|11)-((0[1-9])|([12][0-9])|30))))"

                        + "|" +
                "(([0-9]{4})" +
                        "((-02-((0[1-9])|(([1][0-9])|([2][0-8]))))|" +
                        "(-((0[13578])|(1[02]))-((0[1-9])|([12][0-9])|(3[01])))|" +
                        "(-(0[469]|11)-((0[1-9])|([12][0-9])|30))))";
                       

        System.out.println(Pattern.matches(pattern, "1900-04-31")); //true
        System.out.println(Pattern.matches(pattern, "1900-04-30")); //true
        System.out.println(Pattern.matches(pattern, "1601-02-29")); //false
        System.out.println(Pattern.matches(pattern, "1604-02-29")); //true
        System.out.println(Pattern.matches(pattern, "1900-02-29")); //false
        System.out.println(Pattern.matches(pattern, "0000-02-29")); // true
        System.out.println(Pattern.matches(pattern, "99999-02-28")); //false
        System.out.println(Pattern.matches(pattern, "1421-09-31")); //false
        System.out.println(Pattern.matches(pattern, "1440-02-29")); //true
        System.out.println(Pattern.matches(pattern, "1440-14-29")); //false
    }
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市屈嗤,隨后出現(xiàn)的幾起案子潘拨,更是在濱河造成了極大的恐慌,老刑警劉巖饶号,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铁追,死亡現(xiàn)場離奇詭異,居然都是意外死亡茫船,警方通過查閱死者的電腦和手機琅束,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來算谈,“玉大人涩禀,你說我怎么就攤上這事”羯” “怎么了埋泵?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵幔欧,是天一觀的道長罪治。 經(jīng)常有香客問我,道長礁蔗,這世上最難降的妖魔是什么觉义? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮浴井,結果婚禮上晒骇,老公的妹妹穿的比我還像新娘。我一直安慰自己磺浙,他們只是感情好洪囤,可當我...
    茶點故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著撕氧,像睡著了一般瘤缩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上伦泥,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天剥啤,我揣著相機與錄音,去河邊找鬼不脯。 笑死府怯,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的防楷。 我是一名探鬼主播牺丙,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼复局!你這毒婦竟也來了冲簿?” 一聲冷哼從身側響起是整,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎民假,沒想到半個月后浮入,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡羊异,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年事秀,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片野舶。...
    茶點故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡易迹,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出平道,到底是詐尸還是另有隱情睹欲,我是刑警寧澤,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布一屋,位于F島的核電站窘疮,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏冀墨。R本人自食惡果不足惜闸衫,卻給世界環(huán)境...
    茶點故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望诽嘉。 院中可真熱鬧蔚出,春花似錦、人聲如沸虫腋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽悦冀。三九已至趋翻,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間雏门,已是汗流浹背嘿歌。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留茁影,地道東北人宙帝。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像募闲,于是被迫代替她去往敵國和親步脓。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,876評論 2 361

推薦閱讀更多精彩內(nèi)容