正则表达式:[yY]{2,4}[mM]{2}[dD]{2}([+-]\\d)?
用于匹配YYYYMMDD或YYMMDD的日期格式,请问如何设定Y这部分,让YYYY或YY符合条件,如果输入YYY则不允许呢?用[yY]{2,4}应该表示y或Y可以有2-4个,如何屏蔽3个的情况呢?谢谢~

解决方案 »

  1.   

    String regex = "(?i)yy(?:yy)?mmdd(?:[+-][0-9])?";
      

  2.   

    3楼的挺好的。你可以先忽略大小写。这样的话,就不用比较是Y或是y了。你也可以(?:yy){1,2}  也可以达到yy或yyyy的效果的
      

  3.   

    (?:yy){1,2}这里的?:是什么意思?另外我用(?:yy){1,2}?mmdd(?:[+-][0-9])?后发现,对于YYmmdd格式的就无法识别了?
      

  4.   

    不好意思,不解释清楚。是这样的,正则表达式有一个模式修饰符的,加上修饰符就会有一些副作用的。
    用法:(?modifier)    
    如(?i) 就表示这个修饰符会忽略大小写所以y|Y都可以用(?i)[y]来匹配。由于你需要的是yy或yyyy或YY或YYYY或YyyY或....,所以(?i)(?:yy){1,2}
    这里的?:表示只是用来分组,不用捕获,只是为了提高效率。希望可以帮到你。
      

  5.   

    如果我仅想对yy或yyyy识别出来,对于yyy认为是错误,该如何修改呢?谢谢!
      

  6.   

    (?i)(?:yy){1,2}   这个正则,就只识别yy或yyyy,不能识别yyy
    (yy){1,2}表示yy只能有1个或2个,当有1个时,就是yy;当有2个,就是yyyy。
      

  7.   


    但如果是一个abcYYYmmdd他也是可以识别出来的,因为里面有YY,这个可以解决么?
      

  8.   

    (?:exp)表示不捕获匹配的文本,也不给此组分配组号的意思!  (?:yy){1,2}是说要匹配yy或者yyyy,但不捕获它