用于判断2012-02-01格式的日期字符串,java中用Pattern p1 = Pattern.compile("^2[0-9]{3}d-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$");,这里不能匹配,请问哪里有问题呢?如果想加上闰月判断呢?谢谢!

解决方案 »

  1.   

    直接获取一个日期用simpleformatDate转发成2012-02-01格式就可以啊、
    不用判断
      

  2.   


    import java.util.regex.Pattern ;
    import java.util.regex.Matcher ;
    public class RegexDemo03{
    public static void main(String args[]){
    String str = "1983-07-27" ; // 指定好一个日期格式的字符串
    String pat = "\\d{4}-\\d{2}-\\d{2}" ; // 指定好正则表达式
    Pattern p = Pattern.compile(pat) ; // 实例化Pattern类
    Matcher m = p.matcher(str) ; // 实例化Matcher类
    if(m.matches()){ // 进行验证的匹配,使用正则
    System.out.println("日期格式合法!") ;
    }else{
    System.out.println("日期格式不合法!") ;
    }
    }
    };
      

  3.   

    据论坛某果大神的博客,
    这玩意很难整
    不如用simpledateformat来搞
      

  4.   

    果然难
    n%4 Y
    n%100 N
    n%400 Y//只是年份的验证
        public static void main(String[] args) {
            //29
            String day29 = "(^[48][0]*$)"
                    + "|(^\\d*([02468][48]|[13579][26]|[2468]0)$)"
                    + "|(^\\d*([02468][48]|13579][26])0$)"
                    + "|(^\\d*([24680][480]|[13579][26])00$)";
            //验证
            for (int i = 1; i < 10000000; i += 1) {
                //不能被400整除,能被100整除的都是平年
                if (i % 100 == 0 && i % 400 != 0) {
                    //如果得出是闰年 则出错
                    if (String.valueOf(i).matches(day29)) {
                        System.out.println(i);
                        break;
                    }
                } else {
                    if (i % 4 == 0) {
                        //如果得出不是闰年 则出错
                        if (!String.valueOf(i).matches(day29)) {
                            System.out.println(i);
                            break;
                        }
                    }
                }
            }
        }
      

  5.   

    你不要想了,这种正则表达式写出来,估计你看都看不懂!不建议你这么做,请使用代码进行判断!(?:[0-9]{1,4}(?<!^0?0?0?0))-(?:0?[1-9]|1[0-2])-(?:0?[1-9]|1[0-9]|2[0-8]|(?:(?<=-(?:0?[13578]|1[02])-)(?:29|3[01]))|(?:(?<=-(?:0?[469]|11)-)(?:29|30))|(?:(?<=(?:(?:[0-9]{0,2}(?!0?0)(?:[02468]?(?<![13579])[048]|[13579][26]))|(?:(?:[02468]?[048]|[13579][26])00))-0?2-)(?:29)))
      

  6.   

    详见:http://blog.csdn.net/bao110908/article/details/2132973这个正则表达式构建花费的时间超过 7 个小时!
      

  7.   

    我倒觉得还不如截取字符串来判断更方便些。或者按楼上说的用SimpleDateFormat