结果示意图
正则表达式的分组功能
正则表达式的分组功能
* 捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C))) 中,存在四个这样的组:
1 ((A)(B(C)))
2 (A
3 (B(C))
4 (C)
组零始终代表整个表达式。
B:案例演示
a:切割
需求:请按照叠词切割: “feqqqnxggggggianssssgbe”;
b:替换
需求:我我….我…我.要…要要…要学….学学..学.编..编编.编.程.程.程..程
将字符串还原成:“我要学编程”。
案例代码
package com.ifenx8.regex; public class Demo7_Regex { /** * * A:正则表达式的分组功能 * 捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C))) 中,存在四个这样的组: * 1 ((A)(B(C))) 2 (A 3 (B(C)) 4 (C) 组零始终代表整个表达式。 B:案例演示 a:切割 需求:请按照叠词切割: "feqqqnxggggggianssssgbe"; b:替换 需求:我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程 将字符串还原成:“我要学编程”。 */ public static void main(String[] args) { demo1(); demo2(); //叠词练习如:aabb 高高兴兴 欢欢乐乐 String s = "高高兴兴"; String regex = "(.)\\1(.)\\2";//表示第一组出现一次第二组出现一次 System.out.println(s.matches(regex)); //练习 abab 如 高兴高兴 学习学习 String s2 = "高兴高兴"; String regex2 = "(..)\\1";//表示第一组有两个字符,这一组出现一次 System.out.println(s2.matches(regex2)); } public static void demo2() { /*b:替换 需求:我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程 将字符串还原成:“我要学编程” 分析: 1、首先去掉“.”,用空字符串替换“.”字符 2、去掉叠词重复的 */ String s = "我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程"; String regex = "\\.+";//设置正则表达式,表示一个或多个“.”;这一步可以和下一步合并,如:String s2 = s.replaceAll("\\.+", ""); String s2 = s.replaceAll(regex, "");//用空字符串替换正则表达式 System.out.println(s2); System.out.println("==========="); String s3 = s2.replaceAll("(.)\\1+", "$1"); System.out.println(s3); } public static void demo1() { /*a:切割 需求:请按照叠词切割: "feqqqnxggggggianssssgbe";*/ String s = "feqqqnxggggggianssssgbe";//通过正则的分组功能把字符串重叠的位置切割开 String regex = "(.)\\1+";//表示第一组出现一次到多次 String[] arr = s.split(regex);//将切割后的字符串存入string数组 for (int i = 0; i < arr.length; i++) {//遍历数组 System.out.print(arr[i]); } System.out.println(); System.out.println("==========="); } }
评论前必须登录!
注册