- \:转义符
- ^:以...开头
- $:以...结尾
- *:有0个或多个 count>=0
- +:有1个或多个 count>=1
- ?:有0个或1个 count=1|count=0
-
- [0-9]:范围数字0到9
- [a-z]:范围a-z
- [A-Z]:范围A-Z
- [^0-9]:取反,非0-9
- [abc]:匹配a,b,c
-
- {n} : 匹配n次
- {n,} : 匹配n次及n次以上
- {n,m}:匹配n到m次
- 简介写法
-
- \d:匹配一个数字字符,等价于[0-9]
- \D:匹配一个非数字字符,等价于[^0-9]
- \s:匹配不可见字符
- \S:匹配任意可见字符
- \w:匹配包括下划线在内的任何单词字符
- 等价于[a-zA-Z0-9_\u4e00-\u9fa5]
- \W:匹配任何非单词字符
Pattern类
-
用于创建一个正则表达式,也可以说创建一个匹配模式,它的构造方法是私有的,不可以直接创建
-
可以通过Pattern.complie(String regex)创建一个正则表达式
-
只能做一些简单的匹配操作
Matcher类
-
构造方法也是私有的,不能随意创建,只能通过Pattern.matcher(CharSequence input)方法得到该类的实例 Matcher m = p.matcher("aaaaab");
-
支持便捷强大的正则匹配操作,包括分组、多次匹配支持
Matcher三大方法
- Matcher.matches():对整个字符串进行匹配,只有整个字符串都匹配了才返回true
- Matcher.lookingAt():对前面的字符串进行匹配,只有匹配到的字符串在最前面才返回true
- Matcher.find():对字符串进行匹配,匹配到的字符串可以在任何位置
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class PhoneGet {
public static void main(String[] args) {
String str = "小黑的电话是17317065260小白的电话是17371056700";
String regex = "((.{2,3})的电话是)(\\d{3})(\\d{4})(\\d{4})";
Pattern compile = Pattern.compile(regex);
Matcher matcher = compile.matcher(str);
while (matcher.find()) {
System.out.println(matcher.group(3) + "****" + matcher.group(5));
}
}
}
去除叠字
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class DIeCi {
public static void main(String[] args) {
String str = "我我我。。。。1213要要要123学学。。。编编123123程";
String regex = "(.)(\\1+)";
str = str.replaceAll("[^\\u4e00-\\u9fa5]","");
System.out.println(str);
Pattern compile = Pattern.compile(regex);
Matcher matcher = compile.matcher(str);
while (matcher.find()) {
str = str.replaceAll(matcher.group(0),matcher.group(1));
}
System.out.println(str);
}
}