正则表达式
掌握正则表达式的基本语法
能使用 Java 的 Pattern 和 Matcher
实现校验、提取、替换等常见场景
核心讲解
(1)常用语法
字符:
\d数字、\w字母数字下划线、\s空白、.任意字符量词:
*0 + 次、+1 + 次、?0/1 次、{n}n 次边界:
^开头、$结尾分组:
(),提取用字符集:
[abc]其中一个、[a-z]范围取反:
[^abc]
(2)Java 正则 API
Pattern:编译正则表达式Matcher:匹配器,执行匹配三个功能:
整体匹配:
matches(),校验用查找匹配:
find(),提取用替换:
replaceAll()
代码示例
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class RegexDemo {
public static void main(String[] args) {
// ===== 1. 校验手机号 =====
String phone = "13812345678";
String phoneRegex = "^1[3-9]\\d{9}$";
boolean isPhone = phone.matches(phoneRegex);
System.out.println("手机号合法:" + isPhone);
// ===== 2. 提取内容 =====
String text = "联系电话:13800138000,备用:15912345678,邮箱:admin@test.com";
// 提取所有手机号
Pattern p = Pattern.compile("1[3-9]\\d{9}");
Matcher m = p.matcher(text);
System.out.println("\n提取的手机号:");
while (m.find()) {
System.out.println(m.group());
}
// ===== 3. 提取分组 =====
String info = "张三,年龄:25岁,城市:成都";
Pattern p2 = Pattern.compile("(.+?),年龄:(\\d+)岁,城市:(.+)");
Matcher m2 = p2.matcher(info);
if (m2.matches()) {
System.out.println("\n姓名:" + m2.group(1));
System.out.println("年龄:" + m2.group(2));
System.out.println("城市:" + m2.group(3));
}
// ===== 4. 替换 =====
String mask = text.replaceAll("\\d", "*");
System.out.println("\n脱敏后:" + mask);
}
}
常见误区
Java 里 \ 要转义:Java 字符串里
\要写成\\,所以\d写成"\\d"matches 和 find 混淆:matches 是整个字符串匹配,find 是找子串
group (0) 和 group (1):group (0) 是整个匹配,group (1) 才是第一个分组
每次 find 重置:find 遍历完就没了,要重新匹配得重置 matcher
课后练习
写一个邮箱的正则校验
从一段文本中提取所有的 URL 链接
实现:把文本中的手机号中间 4 位替换成 ****
思考:matches () 和 find () 的区别是什么?

