一、分租的相关概念
分组本质上是用括号将正则表达式分开,前一组不会干扰下一组的正则表达。
正则表达式中的分组类别:
- 捕获分组:继续使用本组的数据。
- 非捕获分组:分组后不需要使用本组的数据,只需包括数据。
本文介绍了非捕获分组的内容:
符号
含义
举例
(?:正则)
获取所有
python(?:a|b|c)
(=正则)
获取前面的内容
python(=a|b|c)
(!正则)
获取不是指定内容的前面
python(a|b|c)
默认情况下,Java是捕获分组(每组内容可以重复使用)。
组号的特点:
- 从1开始,连续不间断。
- 以左括号为基准,最左边是第一组
二:例子分析
案例1:
截图如下:
印刷结果如下:
正则表达式中各部分内容的分析:
- (.): 表示将字符串中重复内容的第一个字符视为一组
- \\1:这意味着第一个字符再次出现
- +:至少表示一次或多次
- $: 表示在正则表达式中取出第一组内容。
案例1代码如下:
/* 需求: 字符串:我想学编程编程程程序。 替换:我想学编程 */ String str = “我要学编程程程程程编程”; //需求: 重复内容 替换为 单个的 //学学 学 ///编编编编 编 ///程程程程程程 程 //(.) 表示重复内容的第一个字符被视为一组 //\\1 这意味着第一个字符再次出现 //+ 至少一次 //$1 表示正则表达式中第一组的内容,再拿出来用 String result = str.replaceAll("(.)\\1+,; System.out.println(result); }
案例2:
截图如下:
运行结果如图所示:
所有代码如下:
/* 非捕获分组:分组后无需使用本组数据,只是把数据包括起来 身份证号: 61191080935228457x 710801197639022302 75040119812705387x 930133197264039024 430102197607046442 04278906767843563x */ ///先定义身份证的正则表达式 String regex = "[1-9]\\d{16}(?:\d|X|x)"; System.out.println("61191080935228457x".matches(regex)); System.out.println("710801197639022302".matches(regex)); System.out.println("75040119812705387x".matches(regex)); System.out.println("930133197264039024".matches(regex)); System.out.println("430102197607046442".matches(regex)); System.out.println("04278906767843563x".matches(regex)); }