当前位置: 首页 > news >正文

java手机号、邮箱、日期正则表达式

Java正则核心API
Java中用 java.util.regex 包的两个类:

  1. Pattern:编译正则表达式
  2. Matcher:执行匹配操作
1. 验证手机号
String regex = "1[3-9]\\d{9}";
boolean isValid = "18812345678".matches(regex); // true
2. 提取邮箱
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. 替换敏感信息
String phone = "手机号:18812345678";
String masked = phone.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
// 结果:手机号:188****5678

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. 字符集合
// 匹配元音字母
Pattern.compile("[aeiou]");    // 匹配 a, e, i 等
// 匹配非数字
Pattern.compile("[^0-9]");     // 匹配 a, @, # 等
4. 分组提取
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 非贪婪
// 贪婪模式(默认)
Pattern.compile("a.*b").matcher("aXXXbYYYb").find(); // 匹配整个字符串

// 非贪婪模式(加?)
Pattern.compile("a.*?b").matcher("aXXXbYYYb").find(); // 只匹配aXXXb

避坑

  1. 转义问题:Java中 \ 要写两次

    // 错误写法:Pattern.compile("\d+"); 
    // 正确写法:
    Pattern.compile("\\d+");
    
  2. 性能优化:复用 Pattern 对象

    // 不要每次编译(低效):
    for(...) {
        Pattern.matches(regex, text); 
    }
    
    // 正确做法:
    Pattern pattern = Pattern.compile(regex);
    for(...) {
        pattern.matcher(text).matches();
    }
    
  3. 边界检查:用 ^$ 严格匹配

    // 可能意外匹配子串:
    "123abc".matches("\\d+"); // false(正确)
    "123".matches("\\d+");    // true
    
    // 错误示例:没有用^$导致误匹配
    "a1b2".matches("\\d+");   // false(正确)
    

相关文章:

  • 【一起来学kubernetes】12、k8s中的Endpoint详解
  • 2024年12月CCF-GESP编程能力等级认证C++编程四级真题解析
  • 【FPGA实战】Verilog实现DE2-115的流水灯控制
  • 自动化测试-网页聊天室
  • 模型评估——acc、P、R、F值、交叉验证、K折交叉验证
  • 方差,协方差及协方差矩阵的计算
  • 二分+前缀和/滑动窗口——成绩统计
  • Linux黑科技防裁防背锅六芒星战阵
  • MySQL开发陷阱与最佳实践:第1章:MySQL开发基础概述-1.1 MySQL简介与应用场景
  • 2021-05-23 C++百元百鸡
  • Python+Selenium
  • 问题二:整形提升
  • Python基础入门掌握(八)
  • Netty 连接存活检测——如何判断连接是否断开?
  • 【设计模式】建造者模式
  • Linux系统中查询命令行解释器
  • leetcode 75.颜色分类(荷兰国旗问题)
  • 基于 Docker 搭建 FRP 内网穿透开源项目
  • 2023南京理工大学计算机复试上机真题
  • .npy文件介绍
  • 文化润疆|让新疆青少年成为“小小博物家”
  • 中国纪检监察报刊文:要让劳动最光荣成为社会的崇高风尚
  • “富卫保险冠军赛马日”创双纪录,打造赛马旅游盛宴,印证香港联通国际优势
  • 上海明天起进入“升温通道”,五一假期冲刺33℃
  • 旧衣服旧纸箱不舍得扔?可能是因为“囤物障碍”
  • VR数字沉浸体验又添新节目,泰坦尼克号驶进文旅元宇宙