2019-06-16 java学习日记
正则表达式的分组功能:
捕获组可以通过从左到右计算其开括号来编号.
例如,在表达式( ( A ) ( B ( C ) ) )中,存在四个这样的组:
( ( A ) ( B ( C ) ) )
(A
(B(C))
(C)
组零始终代表整个表达式
案例
1,:切割
需求:请按照叠词切割: "sdqqfgkkkhjppppkl";
2:替换
需求:我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程
将字符串还原成:“我要学编程”。
1 public static void main(String[] args) { 2 //demo1(); 3 //demo2(); 4 5 String s = "我我....我...我.要...要要...要学....学学..学.编..编编.编.程.程.程..程"; 6 String s2 = s.replaceAll("\\.+", ""); 7 String s3 = s2.replaceAll("(.)\\1+", "$1"); 8 //$1代表第一组中的内容 9 System.out.println(s3); 10 } 11 12 public static void demo2() { 13 //需求:请按照叠词切割: "sdqqfgkkkhjppppkl"; 14 String s = "sdqqfgkkkhjppppkl"; 15 String regex = "(.)\\1+"; 16 //+代表第一组出现一次到多次 17 String[] arr = s.split(regex); 18 19 for (int i = 0; i < arr.length; i++) { 20 System.out.println(arr[i]); 21 } 22 } 23 24 public static void demo1() { 25 //叠词 快快乐乐,高高兴兴 26 /*String regex = "(.)\\1(.)\\2"; 27 //\\1代表第一组又出现一次 28 //\\2代表第二组又出现一次 29 System.out.println("快快乐乐".matches(regex)); 30 System.out.println("快乐乐乐".matches(regex)); 31 System.out.println("高高兴兴".matches(regex)); 32 System.out.println("死啦死啦".matches(regex));*/ 33 34 //叠词 死啦死啦,高兴高兴 35 String regex2 = "(..)\\1"; 36 System.out.println("死啦死啦".matches(regex2)); 37 System.out.println("高兴高兴".matches(regex2)); 38 System.out.println("快快乐乐".matches(regex2)); 39 }
Pattern和Matcher
模式和匹配器的典型调用顺序
Pattern p = Pattern.compile("a * b");
Matcher m = p.mather("aaaaab");
boolean b = m.matches()
正则表达式的获取功能
1 public static void main(String[] args) { 2 //demo1(); 3 String s1="我的手机号是15919112777.曾静用过13672652000,还用过13570659111"; 4 String regex="1[91911]\\d{9}"; //手机号码的正则表达式 5 Pattern p = Pattern.compile(regex); 6 Matcher m = p.matcher(s1); 7 // boolean b=m.find(); 8 // String s2=m.group(); 9 while (m.find()) { 10 System.out.println(m.group()); 11 12 } 13 14 } 15 16 public static void demo1() { 17 Pattern p = Pattern.compile("a*b"); 18 Matcher m = p.matcher("aaaaab"); 19 boolean b = m.matches(); 20 System.out.println(b); 21 22 }