带闰年判断的正则表达式

首先,你的年的范围是1800-3999
润年:
1800,1900,2100,2200,2300,2500,2600,2700,2900,3000,3100,3300,3400,3500,3700,3800,3900是个特殊值(能被4整除但不是润年),要分出来:
String leap1 = "(((1[8-9]) ¦([2-3][0-9]))(0 &brvbar2 &brvbar4 &brvbar6 &brvbar8)(4 &brvbar8))";
String leap2 = "(((2(0 &brvbar4 &brvbar8)) ¦(3(2 &brvbar6)))00)";
其他的0结尾的:
String leap3 = "(((1[8-9]) ¦([2-3][0-9]))(2 &brvbar4 &brvbar6 &brvbar8)0)";
2,6结尾的:
String leap4 = "(((1[8-9]) ¦([2-3][0-9]))(1 &brvbar3 &brvbar5 &brvbar7 &brvbar9)(2 &brvbar6))";
润年2月:
String leapmonth = "(02-(([0-1][1-9]) ¦(10) ¦(2[0-8])))";
其它月份:
String other1 = "(((01) ¦(0[3-9]) ¦(1[0-2]))-(([0-2][1-9]) ¦([1-3]0)))";
String other2 = "(((0(1 &brvbar3 &brvbar5 &brvbar7 &brvbar8)) ¦(10) ¦(12))-(31))";
把上面4种正则表达式用 ¦连接,然后加上润年的2月和其他月份的处理:
String leap = "(" + leap1 + " ¦" + leap2 + " ¦" + leap3 + " ¦" + leap4 + ")-("
+ leapmonth + " ¦" + other1 + " ¦" + other2 + ")";

非润年:
String noleap1 = "(((1[8-9]) ¦([2-3][0-9]))(0 &brvbar2 &brvbar4 &brvbar6 &brvbar8)(1 &brvbar2 &brvbar3 &brvbar5 &brvbar6 &brvbar7 &brvbar9))";
String noleap2 = "(((1[8-9]) ¦(2(1 &brvbar2 &brvbar3 &brvbar5 &brvbar6 &brvbar7 &brvbar9)) ¦(3(0 &brvbar1 &brvbar3 &brvbar4 &brvbar5 &brvbar7 &brvbar8 &brvbar9)))00)";
String noleap3 = "(((1[8-9]) ¦([2-3][0-9]))(1 &brvbar3 &brvbar5 &brvbar7 &brvbar9)(0 &brvbar1 &brvbar3 &brvbar4 &brvbar5 &brvbar7 &brvbar8 &brvbar9))";
非润年2月:
String month = "(02-(([0-2][1-9]) ¦([1-2]0)))";
把上面3种正则表达式用 ¦连接,然后加上非润年2月和其他月份的处理:
String noleap = "(" + noleap1 + " ¦" + noleap2 + " ¦" + noleap3 + ")-("
+ month + " ¦" + other1 + " ¦" + other2 + ")";

润年和非润年的正则表达式的组合就是了:
String yearregex = leap + " ¦" + noleap;

你把leapmonth 和 month 调转了吧 :)

Published At
Categories with Web编程
Tagged with
comments powered by Disqus