闰年正则表达式

时间:2013-01-25 10:19:21

标签: regex

我的任务是写一个只接受闰年的正则表达式,第一年必须是1584而没有上限。有人可以帮我重做这个expr。 ?

(15(8[48]|9[26]))|((1[6-9]|[2-9]\d)(0[48]|[13579][26]|[2468][048]))|(([2468][048]|16|3579[26])00)

它无效,我做到了:

(15(8[48]|9[26]))|((1[6-9]|[2-9]\d)(0[48]|[13579][26]|[2468][048]))|(([2468][048]|16|3579[26])00)|
(
    [1-9]\d*
    (
        ([02468][048]|[13579][26])00
        |
        \d\d(0[48]|[13579][26]|[2468][048])
    )
)

和9996它有效,但当我加1它不接受19996,或100000000或更高,我做错了什么?

例如它不适用于109400

1 个答案:

答案 0 :(得分:1)

你的正则表达式匹配从1584年到9996的闰年。

要计算大于9996的闰年,只需在正则表达式的末尾添加此替代方法:

|
(
    [1-9]\d*
    (
        ([02468][048]|[13579][26])00
        |
        \d\d(0[48]|[13579][26]|[2468][048])
    )
)

@ user2010564:在正则表达式末尾的单行添加:

|([1-9]\d*(([02468][048]|[13579][26])00|\d\d(0[48]|[13579][26]|[2468][048])))