10.javaSE --- 常用API --- 捕获和非捕获分组

正则表达式中,每组是有组号的,也就是序号

规则:

        1.从1开始,连续不间断。

        2.以左括号为基准,最左边的是第一组,其次为第二组,以此类推。

                \\组号,表示把第x组的内容调出来再用一次

1.正则表达式捕获分组

  public static void main(String[] args) {
        //需求1:判断一个字符串的开始字符和结束字符是否一致,只考虑一个字符
        //举例:a123a b456b &1122& a123456b 1001
        String regex1 = "(.).+\\1";
        System.out.println("a123a".matches(regex1));
        System.out.println("b456b".matches(regex1));
        System.out.println("&1122&".matches(regex1));
        System.out.println("a123456b".matches(regex1));
        System.out.println("1001".matches(regex1));
        System.out.println("----------------");
        //需求2:判断一个字符串的开始部分和结束部分是否一致,可以有多个字符
        //举例:abc123abc b456b 123a56123 &*@123&*@ abc123&*@
        String regex2 = "(.+).+\\1";
        System.out.println("abc123abc".matches(regex2));
        System.out.println("b456b".matches(regex2));
        System.out.println("123a56123".matches(regex2));
        System.out.println("&*@123&*@".matches(regex2));
        System.out.println("abc123&*@".matches(regex2));
        System.out.println("---------------");
        //需求3:判断一个字符串的开始部分和结束部分是否一致,开始部分内部每个字符也需要一致
        //举例:aaa123aaa bbb456bbb 11123456111 &&7b9&&
        //注意,是左括号开始标识序号!!所以比较大的括号是1号,括点的括号是2号
        String regex3 = "((.)+\\2*).+\\1";
        System.out.println("aaa123aaa".matches(regex3));
        System.out.println("bbb456bbb".matches(regex3));
        System.out.println("11123456111".matches(regex3));
        System.out.println("&&7b9&&".matches(regex3));
    }

 

$组号:表示从外部调入正则表达式

   public static void main(String[] args) {
        //需求:用捕获分组将”aaabbbccc“替换成”abc“
        String str = "aaabbbccc";
        System.out.println(str);
        //此为单个字符重复情况的规则
        String regex1 = "(.)\\1+";
        //这是修改规则
        String regex2 = "$1";
        //替换代码
        String result = str.replaceAll(regex1,regex2);
        System.out.println(result);
    }

 

 非捕获分组:分组之后不需要再用本组数据,仅仅是把数据括起来 --- 不占用组号

        1.(?:正则) --- 获取所有

        2.(?=正则) --- 获取前面部分

        3.(?!正则) --- 获取不是指定内容的前面部分

 此时可看见,输入?:之后,使用\\1报错了,说明此时标注的?:表示前面的后面的都不再捕获,那么这里就不存在组号了,所以\\1在捕获谁呢?而其他两个也是一样的,日常中,我们大部分都是使用?:的形式更多点。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值