正则表达式——(2) 匹配、切割、替换、获取

目录

 

1、匹配功能

2、切割功能

3、替换

4、获取


1、匹配功能

需求:验证手机号码是否合法

其实用的就是String类中matches方法

  /**
     * 演示匹配
     * 匹配手机号是否正确
     */
    public static void functionDemo_1() {

        String tel="15287648890";
        //正则表达式 第一位肯定是1 第二位是 345789 剩下的是0-9中的任意数字
        String rege="1[345789][0-9]{9}";
        //校验
        boolean matches = tel.matches(rege);
        System.out.println(tel+":"+matches);

    }

 

String tel="05287648890";

 

2、切割功能

其实使用的就是String类中的split方法。 

需求:切割名字输出

分析:名字之间有很多连续的字符串,且第一个间隔的字符串与第二个间隔的字符不相同。

1、那么就把第一个间隔的字符的第一个字符定义为一组,是任意的。组用"( )"括号表示  "."表示任意。

2、在正则中会根据"( )"自动编号分组,所以第一个字符的编号为1,后面的需要沿用1组。出现一次或者多次。可以用正则"X+",X代表匹配的内容。

3、1需要被转义成组编号,所以需要加"\1","\1"在字符串中又要转义,所以最终的形式是"\\1+"

编码:

 /**
     * 切割
     * 组
     * 在表达式 ((A)(B(C))) 中,存在四个这样的组:
     * 1组     ((A)(B(C)))
     * 2组     \A
     * 3组     (B(C))
     * 4组     (C)
     */
    public static void functionDemo_2() {
        String str = "zhangsanttttxiaoqiangmmmmmmzhaoliu";
        //字符的切割方法split() 里面传入正则表达式
        String[] names = str.split("(.)\\1+");
        for (String name : names) {
            System.out.println(name);
        }
    }

 

3、替换

1、将重复的字符使用#替换。

2、重复字符只输出一次。

3、隐藏指定的数字字符

public static void functionDemo_3() {

        String str = "zhangsanttttxiaoqiangmmmmmmzhaoliu";
        String str1 = "zhangsanttttxiaoqiangmmmmmmzhaoliu";
        //1、将字符串中重复的字符用#替换
        str = str.replaceAll("(.)\\1+", "#");
        System.out.println(str);//zhangsan#xiaoqiang#zhaoliu
        //$可以在其他参数中对前一个参数中已有的正则的规则获取
        // 2、获取重复字符,重复字符只输出一次
        String tow= str1.replaceAll("(.)\\1+", "$1");
        System.out.println(tow);//zhangsantxiaoqiangmzhaoliu

        //3、隐藏指定的数字字符
        String tel="15288544569";
        //正则分组,按照分组输出
        tel = tel.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
        System.out.println(tel);

    }

4、获取

1、先将正则表达式封装成对象

2、通过正则对象的matcher方法字符串相关联。获取要对字符串操作的匹配器对象Matcher 

3、通过Matcher匹配器对象的方法对字符串进行操作。

 /**
     * 获取
     * 将正则规则进行对象的封装。
     * Pattern p = Pattern.compile("a*b");
     *  //通过正则对象的matcher方法字符串相关联。获取要对字符串操作的匹配器对象Matcher .
     * Matcher m = p.matcher("aaaaab");
     * //通过Matcher匹配器对象的方法对字符串进行操作。
     * boolean b = m.matches();
     */
    public static void functionDemo_4() {
        String str = "da jia hao,ming tian bu fang jia!";
        /**
         *[a-z]{3} 获取连续三个字母的单词
         * \\b拥有单词边界
         */
        String regex = "\\b[a-z]{3}\\b";
        //1,将正则封装成对象。
        Pattern p = Pattern.compile(regex);
        //2, 通过正则对象获取匹配器对象。
        Matcher m = p.matcher(str);

        //使用Matcher对象的方法对字符串进行操作。
        //既然要获取三个字母组成的单词
        //查找。 find();
        System.out.println(str);
        while(m.find()){
            System.out.println(m.group());//获取匹配的子序列
            //获取单词的起始位置
            System.out.println(m.start()+":"+m.end());
        }
    }

发布了186 篇原创文章 · 获赞 45 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/zhanshixiang/article/details/104076384
今日推荐