美文网首页
java中正则表达式操作集合

java中正则表达式操作集合

作者: 楼兰King | 来源:发表于2020-09-09 14:08 被阅读0次
    时间操作,目前此表达式支持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
    总结:如何,一招搞定,随你怎么填,想替换哪些字符随你填,直接一个搞定。

    相关文章

      网友评论

          本文标题:java中正则表达式操作集合

          本文链接:https://www.haomeiwen.com/subject/uoyeektx.html