我是个初学者,用正则式在一个字串里查找并输出YYYY-XX-ZZ格式的日期,求其简单的正则式,只求其格式有下面四种值:
"2005-01-02"
"2005-2-1"
"2005-01-2"
"2005-1-06"
有上面四种中任一相应格式,即合法.
菜鸟求教!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

解决方案 »

  1.   

    String replacedStr2 = "dfjlsjdlfkjskdjfklsd 2005-01-02 lkjfldfdfdf 2005-2-1 kdkjjjj我的家 2005-01-2 sjsdjflsldkjflksdlkf 2005-1-06 fd";
    String patternStr2 = "/(\\d{2,4})[\\-](\\d{1,2})[\\-](\\d{1,2})/";
    Pattern pBase2 = Pattern.compile(patternStr2,Pattern.CASE_INSENSITIVE);
    Matcher mBase2 = pBase2.matcher(replacedStr2);
    boolean result2 = mBase2.find();
    StringBuffer sb2 = new StringBuffer();while(result2){
       mBase2.appendReplacement(sb2, mBase2.group(0));
       System.out.println("===" + mBase2.group(0));
       result2 = mBase2.find();
    }如上:不能通过.烦高手再指教!!!!!!!!!!!!
      

  2.   

    楼上的还不能判断这个日期是否合法DateFormat f = new SimpleDateFormat("yyyy-MM-dd");
    System.out.println(f.parse("xxxx-xx-xx"));看是否抛异常
      

  3.   

    /(\d{2,4})[\-](\d{1,2})[\-](\d{1,2})/
    这样是对的,但是只是字符的匹配,要真正做到时间合理就是不出现2005-13-65这种表达^_^就不适合了
    还是做个控件,点击返回日期算了^_^
      

  4.   

    String replacedStr2 = "dfjlsjdlfkjskdjfklsd 2005-01-02 lkjfldfdfdf 2005-2-1 kdkjjjj我的家 2005-01-2 sjsdjflsldkjflksdlkf 2005-1-06 fd";
            String patternStr2 = "(\\d{2,4})[\\-](\\d{1,2})[\\-](\\d{1,2})";
            Pattern pBase2 = Pattern.compile(patternStr2,Pattern.CASE_INSENSITIVE);
            Matcher mBase2 = pBase2.matcher(replacedStr2);
            //boolean result2 = mBase2.find();
            StringBuffer sb2 = new StringBuffer();        while(mBase2.find()){
               mBase2.appendReplacement(sb2, mBase2.group(0));
               System.out.println("===" + mBase2.group(0));
               //result2 = mBase2.find();
            }
      

  5.   

    多谢各位的参与及宝贵看法, 多谢"believefym(暮色,miss,迷失,miss) "给出正确答案.以后多请教,如果愿意多教我几招(如哪位高手愿意,我真是太感谢了).能否加我QQ(540625137).多谢了.
      

  6.   

    晕,我的UE怎么复制不了东西,搞了半天才复制出来.
    ^((?:(?:(?:19|20|21)\\d{2})[-](?:0?[13578]|1[02])[-](?:0?[1-9]|[12]\\d|3[01]))|(?:(?:(?:19|20|21)\\d{2})[-](?:0?[13456789]|1[012])[-](?:0?[1-9]|[12]\\d|30))|(?:(?:(?:19|20|21)\\d{2})[-]02(?:0?[1-9]|1\\d|2[0-8]))|(?:(?:(?:20(?:0[048]|[2468][048]|[13579][26]))|(?:(?:19|21)(?:0[48]|[2468][048]|[13579][26])))0229))$,闰年,月大月小都包括进去了.从1900-2199.用SimpleDateFormat检查日期是否合法有时候不能用.比如格式是yyyyMMdd时,你输入一个20051038,照样通过检查.