Java正则表达式收藏

开贴在此记录正则表达式,不定期更新~~~

一、匹配时间

①匹配[yyyy-MM-dd]的正则表达式:

String reg_yyyy_MM_dd = "(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})" +

                "-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))" +

                "|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)";

②匹配[yyyyMMdd]的正则表达式:

String reg_yyyyMMdd = "(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})(((0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))" +

                "|((0[469]|11)(0[1-9]|[12][0-9]|30))|(02(0[1-9]|[1][0-9]|2[0-8]))))" +

                "|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))0229)";

③匹配[dd/MM/yyyy]的正则表达式:

String reg_dd_MM_yyyy = "(((0[1-9]|[12][0-9]|3[01])/((0[13578]|1[02]))|((0[1-9]|[12][0-9]|30)/(0[469]|11))|(0[1-9]|[1][0-9]|2[0-8])/(02))" +

                "/([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3}))|" +

                "(29/02/(([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00)))";

网上传的正则表达式比较多,但是有些确实不靠谱,怎么证明我上面的几个靠谱呢?测试

附上测试代码:

import java.text.SimpleDateFormat;

import java.util.Calendar;



public class DateCheck {

    public static void main(String[] args) {

        //yyyy-MM-dd 

        String reg_yyyy_MM_dd = "(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})" +

                "-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))" +

                "|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)";

        

        //yyyyMMdd 

        String reg_yyyyMMdd = "(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})(((0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))" +

                "|((0[469]|11)(0[1-9]|[12][0-9]|30))|(02(0[1-9]|[1][0-9]|2[0-8]))))" +

                "|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))0229)";

        

        //dd/MM/yyyy

        String reg_dd_MM_yyyy = "(((0[1-9]|[12][0-9]|3[01])/((0[13578]|1[02]))|((0[1-9]|[12][0-9]|30)/(0[469]|11))|(0[1-9]|[1][0-9]|2[0-8])/(02))" +

                "/([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3}))|" +

                "(29/02/(([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00)))";

        

        

        Calendar calendar = Calendar.getInstance();

        calendar.set(1970, 0, 1, 0, 0, 0);

        

        SimpleDateFormat format1 = new SimpleDateFormat("yyyy-MM-dd");

        SimpleDateFormat format2 = new SimpleDateFormat("yyyyMMdd");

        SimpleDateFormat format3 = new SimpleDateFormat("dd/MM/yyyy");

        

        Calendar today = Calendar.getInstance();

        while(calendar.before(today)){

            String dayString1 = format1.format(calendar.getTime());

            String dayString2 = format2.format(calendar.getTime());

            String dayString3 = format3.format(calendar.getTime());

            

            if(!dayString1.matches(reg_yyyy_MM_dd)){

                System.out.println(dayString1+"matches [yyyy-MM-dd] fail!");

            }

            if(!dayString2.matches(reg_yyyyMMdd)){

                System.out.println(dayString2+"matches [yyyyMMdd] fail!");

            }

            if(!dayString3.matches(reg_dd_MM_yyyy)){

                System.out.println(dayString2+"matches [dd/MM/yyyy] fail!");

            }

            calendar.add(Calendar.DAY_OF_MONTH, 1);//增加一天

        }

        System.out.println("检测完毕!");

    }

}

这些个正则表达式写起来有点小复杂,不过发现有个哥们讲述的挺详细的,感兴趣的话可以猛击这里

 

 

 

 

 

 

你可能感兴趣的:(java正则表达式)