正则表达式——(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());
        }
    }

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

真香号

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值