一、正则表达式能干什么?
- ✅ 验证格式:手机号、邮箱、日期
 - ✅ 提取数据:从日志/文本中抓取关键信息
 - ✅ 替换文本:批量修改字符串内容
 
二、Java正则核心API
Java中用 java.util.regex 包的两个类:
Pattern:编译正则表达式Matcher:执行匹配操作
            
            
              java
              
              
            
          
          // 快速匹配示例
String regex = "\\d+";  // 匹配数字
boolean isMatch = Pattern.matches(regex, "123"); // true
// 提取数据示例
Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher("价格:99元,库存:5");
while(matcher.find()) {
    System.out.println(matcher.group()); // 输出 99 和 5
}
        三、5个必会语法(附Java代码)
1. 基础匹配
| 符号 | 说明 | Java示例 | 匹配结果 | 
|---|---|---|---|
\d | 
数字 | "a\\d" | 
a1, a9 | 
\w | 
字母数字下划线 | "\\w+" | 
hello, user1 | 
. | 
任意字符 | "a.c" | 
abc, a@c | 
^ | 
开头 | "^Java" | 
Java真好用 | 
$ | 
结尾 | "end$" | 
这是end | 
2. 量词(控制次数)
| 符号 | 说明 | 示例 | 匹配内容 | 
|---|---|---|---|
? | 
0或1次 | "a?" | 
"", a | 
+ | 
1次或多次 | "\\d+" | 
1, 123 | 
* | 
0次或多次 | "a*" | 
"", aaaa | 
{n} | 
精确n次 | "\\d{4}" | 
2023 | 
3. 字符集合
            
            
              java
              
              
            
          
          // 匹配元音字母
Pattern.compile("[aeiou]");    // 匹配 a, e, i 等
// 匹配非数字
Pattern.compile("[^0-9]");     // 匹配 a, @, # 等
        4. 分组提取
            
            
              java
              
              
            
          
          String text = "电话:188-1234-5678";
Pattern pattern = Pattern.compile("(\\d{3})-(\\d{4})-(\\d{4})");
Matcher matcher = pattern.matcher(text);
if(matcher.find()) {
    System.out.println(matcher.group(1)); // 188
    System.out.println(matcher.group(2)); // 1234
    System.out.println(matcher.group(3)); // 5678
}
        5. 贪婪 vs 非贪婪
            
            
              java
              
              
            
          
          // 贪婪模式(默认)
Pattern.compile("a.*b").matcher("aXXXbYYYb").find(); // 匹配整个字符串
// 非贪婪模式(加?)
Pattern.compile("a.*?b").matcher("aXXXbYYYb").find(); // 只匹配aXXXb
        四、高频实战案例
1. 验证手机号
            
            
              java
              
              
            
          
          String regex = "1[3-9]\\d{9}";
boolean isValid = "18812345678".matches(regex); // true
        2. 提取邮箱
            
            
              java
              
              
            
          
          String text = "联系我:admin@test.com 或 user@qq.com";
Pattern pattern = Pattern.compile("\\w+@\\w+\\.\\w+");
Matcher matcher = pattern.matcher(text);
while(matcher.find()) {
    System.out.println(matcher.group()); // 输出两个邮箱
}
        3. 替换敏感信息
            
            
              java
              
              
            
          
          String phone = "手机号:18812345678";
String masked = phone.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
// 结果:手机号:188****5678
        五、避坑指南(Java专属)
- 
转义问题 :Java中
\要写两次java// 错误写法:Pattern.compile("\d+"); // 正确写法: Pattern.compile("\\d+"); - 
性能优化 :复用
Pattern对象java// 不要每次编译(低效): for(...) { Pattern.matches(regex, text); } // 正确做法: Pattern pattern = Pattern.compile(regex); for(...) { pattern.matcher(text).matches(); } - 
边界检查 :用
^和$严格匹配java// 可能意外匹配子串: "123abc".matches("\\d+"); // false(正确) "123".matches("\\d+"); // true // 错误示例:没有用^$导致误匹配 "a1b2".matches("\\d+"); // false(正确) 
总结 :正则表达式就是用符号描述字符串规则 ,多写多练才能掌握!遇到复杂需求时,先拆解再组合,Java的 Pattern 和 Matcher 能帮你轻松应对文本处理需求! 🚀
            
            
              java
              
              
            
          
          // 快速测试你的正则(复制到main方法试试)
String regex = "你的正则";
String text = "测试文本";
System.out.println(text.matches(regex));