比如最近看到一个表示日期的:
(([0-9]{2}([02468][048])|([13579][26])))(02)(([0][1-9])|([1-2][0-9]))|(([0-9]{2}([02468][123579])|([13579][01345789])))(02)(([0][1-9])|([1][0-9])|([2][0-8]))|([0-9]{4})(([0](1|3|5|7|8))|10|12)(([0][1-9])|([1-2][0-9])|30|31)|([0-9]{4})(04|06|09|11)(([0][1-9])|([1-2][0-9])|30)这个很长,不知道怎么下手去看,有人能指导一下嘛?

解决方案 »

  1.   

    验证二月份29号的情况
    Y(([0-9]{2}([02468][048])|([13579][26])))M(02)D(([0][1-9])|([1-2][0-9]))
    Y(( \d{2}   [02468][048])| [13579][26])  M(02)D(  01-09   |  10-29     )
    example:20040229 or 960229 验证二月份28号的情况
    Y(([0-9]{2}([02468][123579])|([13579][01345789])))M(02)D(([0][1-9])|([1][0-9])|([2][0-8]))
    Y ( \d{2}   [02468][123579])| [13579][01345789])  M(02)D(  01-09   |  10-19   |20-28)
    example:20070228 or 940228 验证月份有30号的情况
    Y([0-9]{4})M(([0](1|3|5|7|8))|10|12)D(([0][1-9])|([1-2][0-9])|30|31)
    Y( \d{4}  )M(  01|03|05|07|08|10|12)D(  01-09   | 10-29      |30|31)
    example:20051231 or 20050831验证月份有31号的情况
    Y([0-9]{4})M(04|06|09|11)D(([0][1-9])|([1-2][0-9])|30)
    Y( 2005   )M(04|06|09|11)D(  01-09   | 10-29      |30)
    example:20050630 or 20051130满足四个中的一种即可
      

  2.   

    不好意思,写反了验证月份有"31"号的情况
    Y([0-9]{4})M(([0](1|3|5|7|8))|10|12)D(([0][1-9])|([1-2][0-9])|30|31)
    Y( \d{4}  )M(  01|03|05|07|08|10|12)D(  01-09   | 10-29      |30|31)
    example:20051231 or 20050831验证月份有"30"号的情况
    Y([0-9]{4})M(04|06|09|11)D(([0][1-9])|([1-2][0-9])|30)
    Y( 2005   )M(04|06|09|11)D(  01-09   | 10-29      |30)
    example:20050630 or 20051130
      

  3.   

    推荐一款来自
    http://www.regexlab.com/
    的免费正则表达式编写及调试工具:http://www.regexlab.com/download/?/mtracer/MTracer.zip