java中正则表达式操作集合

2020-09-09  本文已影响0人  楼兰King
时间操作,目前此表达式支持2018-08-20 09:09:09样式,具体可参看代码
 public static void main(String args []) {
        String str = "2017_03_2009:09:09";
        /**
         * 匹配任何非空白字符:\S 或  [^\s],^用于"[]"外表示从开头匹配,用于"[]"内表示"非",即不包括
         *
         * 匹配任何空白字符:\s 或 [^\S],等价于[ \f\n\r\t\v],这里小写s是匹配所有非空白,大写刚好相反
         *
         * \f -> 匹配一个换页
         * \n -> 匹配一个换行符
         * \r -> 匹配一个回车符
         * \t -> 匹配一个制表符
         * \v -> 匹配一个垂直制表符*/
        String pattern = "\\d{4}(\\-|\\/|.|_)\\d{1,2}\\1\\d{1,2}([^\\S]|[^\\s])\\d{1,2}(\\-|\\/|.|_|:)\\d{1,2}(\\-|\\/|.|_|:)\\d{1,2}";

        Pattern r = Pattern.compile(pattern);
        Matcher m = r.matcher(str);
        System.out.println(m.matches());
 /**验证是否为日期格式*/
    public static Date judgeTime(String time){
        String[] parsePatterns = {"yyyy-MM-dd","yyyy年MM月dd日",
                "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy/MM/dd",
                "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyyMMdd","yyyy-MM-dd HH:mm:ss.SSSSSSS",
                "YYYY_MM_DD","YYYY.MM.DD","YYYY.MM.DD HH:mm:ss","yyyy/MM/dd HH/mm/ss",
                "yyyy.MM.dd HH.mm.ss","yyyy-MM-ddHH:mm:ss","yyyy/MM/ddHH:mm:ss","yyyyMMddHH:mm:ss",
                "YYYY_MM_DD HH:mm:ss","yyyy-MM-dd HH-mm-ss"};
        if(time==null){
            return null;
        }
        try {
           return org.apache.commons.lang3.time.DateUtils.parseDate(time,parsePatterns);
        }catch (Exception e){
            log.error("日期转换错误:"+e.getMessage());
            return null;
        }

    }
利用Pattern和Matcher实现多个字符替换
场景描述:经常会遇到,需要做个功能,如给定如下代码的一串字符,要将某数据中的全部这些字符转换成某某,此时会用到,很多也都会用到将字符切割成一个一个,然后利用replaceAll(正则,最终要替换成的值)这样去做,其实会有个坑,当有特殊字符需要做进一步处理,当有更特殊的字符,会更加错误,如下代码会展示错误和正确用法。
遇到的坑
public static void main(String[] args) {
        String shijian="~!@#¥%……&*()+字S9";
        String bstr="9S2020S#0&91*0lpla!kkk@pkl";
        String zhi=delSpecialChara(shijian);
        System.out.println(zhi);
        String astr=bstr.replaceAll(zhi,"好");
        System.out.println(astr);
    }
/**将指定所需过滤字符切割并重组为正则规则表达式*/
public static String delSpecialChar(String content){
        String ruleContent=null;
        if(!StringUtils.isEmpty(content)&&content!=null){
            StringBuffer buffer=new StringBuffer();
            for(int i=0;i<content.length();i++){
                buffer.append("\\").append(content.charAt(i)).append("|");
            }
            ruleContent=  buffer.deleteCharAt(buffer.length()-1).toString();
        }
        return ruleContent;
    }
输出如下:

~|\!|@|#|\¥|%|\…|\…|&|*|\(|\)|+|\字|\S|\9
好好好好好好好好好好好好好好好好好好好好好好好好好好

惊不惊讶,难受不难受,把值全部干掉了,为什么,因为重点在\S这个上面,它在正则中表示的是什么,代表全部不为空的值全部匹配,正好小写s相反,这方面可以查看资料。

那好把它去掉,再看。


image.png

发现了什么,数字是不起作用的,如果想用这个也可以,不过需要在搞点手脚,可是作为程序员,哪来这么多闲心,既然不爽那就不用,下面就用又果断又舒服,一次性嘎嘎搞定的上场。

 public static void main(String[] args) {
        String shijiana="[~!@#¥%……&*()+字920SkpTYhm8]";
        String bstr="9S2020S#0&91*0lpla!kkk@pkl";
        System.out.println("正则结果值:"+zhengze(bstr,shijiana));
    }
/**字符正则替换*/
    public static String zhengze(String zhi,String biaodashi){
        Pattern pattern=Pattern.compile(biaodashi);
        Matcher matcher=pattern.matcher(zhi);
        //将字符串中所有符合的特殊字符过滤,替换为指定值
        String nstr=matcher.replaceAll("正");
        return nstr;
    }

输出如下:


image.png
总结:如何,一招搞定,随你怎么填,想替换哪些字符随你填,直接一个搞定。
上一篇 下一篇

猜你喜欢

热点阅读