Java正则表达式-捕获分组和非捕获分组12-创新互联

分组()简介:

捕获分组:后续还要继续使用本组数据。
正则内部使用:\组号
正则外部使用:$组号
非捕获分组:分组后不在使用本组数据,仅仅把数据括起来
(? : 正则):获取所有 例:Java(? : 8|11|17) 结果:Java8或Java11或Java17
(? = 正则):获取前面部分 例:Java(? = 8|11|17) 结果:8、11、17版本的Java
(? ! 正则):获取不是指定内容的前面部分 例:Java(? : 8|11|17) 结果:除了8、11、17版本的Java
细节:如何识别组号?
只看左括号,不看右括号,按照左括号的顺序,从左往右,依次为第一组,第二组,第三组等等

创新互联专注于揭阳企业网站建设,成都响应式网站建设公司,商城网站定制开发。揭阳网站建设公司,为揭阳等地区提供建站服务。全流程按需求定制网站,专业设计,全程项目跟踪,创新互联专业和态度为您提供的服务

捕获分组代码演示:

//需求1:判断一个字符串的开始字符和结束字符是否一致?只考虑一个字符
//举例: a123a b456b 17891 &abc& a123b(false)
// \\组号:表示把第X组的内容再出来用一次
String regex1 = "(.).+\\1";
System.out.println("a123a".matches(regex1)); //true
System.out.println("b456b".matches(regex1)); //true
System.out.println("17891".matches(regex1)); //true
System.out.println("&abc&".matches(regex1)); //true
System.out.println("a123b".matches(regex1)); // false
System.out.println("--------------------------");


//需求2:判断一个字符串的开始部分和结束部分是否一致?可以有多个字符
//举例: abc123abc b456b 123789123 &!@abc&!@ abc123abd(false)
String regex2 = "(.+).+\\1";
System.out.println("abc123abc".matches(regex2)); //true
System.out.println("b456b".matches(regex2)); //true
System.out.println("123789123".matches(regex2)); //true
System.out.println("&!@abc&!@".matches(regex2)); // true
System.out.println("abc123abd".matches(regex2)); //false
System.out.println("---------------------");

//需求3:判断一个字符串的开始部分和结束部分是否一致?开始部分内部每个字符也需要一致
//举例: aaa123aaa bbb456bbb 111789111 &&abc&&
//(.):把首字母看做一组
// \\2:把首字母拿出来再次使用
// *:作用于\\2,表示后面重复的内容出现0次或多次
String regex3 = "((.)\\2*).+\\1";
System.out.println("aaa123aaa".matches(regex3)); //true
System.out.println("bbb456bbb".matches(regex3)); //true
System.out.println("111789111".matches(regex3)); //true
System.out.println("&&abc&&".matches(regex3)); //true
System.out.println("aaa123aab".matches(regex3)); //false

捕获分组练习

需求:
将字符串:我要学学编编编编程程程程程程。
替换为:我要学编程

代码实现:

String str = "我要学学编编编编程程程程程程";

//需求:把重复的内容 替换为 单个的
//学学                学
//编编编编            编
//程程程程程程        程
//  (.)表示把重复内容的第一个字符看做一组
//  \\1表示第一字符再次出现
//  + 至少一次
//  $1 表示把正则表达式中第一组的内容,再拿出来用
String result = str.replaceAll("(.)\\1+", "$1");
System.out.println(result);

非捕获分组代码演示:

//身份证号码的简易正则表达式
//非捕获分组:仅仅是把数据括起来
//特点:不占用组号
//这里\\1报错原因:(?:)就是非捕获分组,此时是不占用组号的。


//(?:) (?=) (?!)都是非捕获分组//更多的使用第一个
//String regex1 ="[1-9]\\d{16}(?:\\d|x|x)\\1";
String regex2 ="[1-9]\\d{16}(\\d Xx)\\1";
//^([01]\d|2[0-3]):[0-5]\d:[@-5]\d$

System.out.println("41080119930228457x".matches(regex2));

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


新闻名称:Java正则表达式-捕获分组和非捕获分组12-创新互联
当前地址:http://scjbc.cn/article/jijic.html

其他资讯