Java 正则表达式详解
总结:
-
搜索(匹配):在一个字符串中搜索出一个或多个与正则表达式相匹配的子字符串。搜索又分为匹配和子字符串搜索。匹配是对用户所提供的整个字符串进行判断,看其是否匹配正则表达式,比如电子邮件地址的匹配。子字符串搜索是“搜索”的普遍含义,指的是将与正则表达式相匹配的所有子字符串找出来,比如将一段英文文本中的所有单词给找出来。
-
替换(匹配并替换):将一个字符串中与正则表达式相匹配的子字符串找出来并替换成另一些子字符串,比如将一个字符串中的所有的cos替换成sin。
// 忽略ABC的大小写
System.out.println("abC".matches("(?i)abc")); // true
System.out.println("aBC".matches("(?i)abc")); // true
System.out.println("AbC".matches("(?i)abc")); // true
System.out.println("abC".matches("(?i)abc")); // true
System.out.println("ABC".matches("(?i)abc")); // true
System.out.println("abc".matches("(?i)abc")); // true
System.out.println("abcd".matches("(?i)abc")); // false
捕获分组与非捕获分组
- 正则默认是捕获分组
String str = "我爱爱爱爱编编编编编编编程程程";
// (.)\1* 获取单个单词,包括出现多次的情况
List<String> list = ReUtil.findAll("(.)\\1*", str, 0);
System.out.println(list); // [我, 爱爱爱爱, 编编编编编编编, 程程程]
// 去重
String s = str.replaceAll("(.)\\1*", "$1");
System.out.println(s); // 我爱编程
世界上没有什么事情是跑步解决不了的,如果有,那就再跑一会!