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

embedded/2025/3/17 4:25:34/

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

  1. Pattern:编译正则表达式
  2. Matcher:执行匹配操作
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

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)); // 188System.out.println(matcher.group(2)); // 1234System.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中 \ 要写两次

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

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

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


http://www.ppmy.cn/embedded/173243.html

相关文章

【BP神经网络】实战

1.参考Python实战:BP神经网络_bp神经网络实战python-CSDN博客 2.实践 (1)运行环境 anocanda Powershell Prompt(anocanda3) (2)创建虚拟环境,解决安装包的版本问题 *打开终端&a…

【小沐学Web3D】three.js 加载三维模型(React)

文章目录 1、简介1.1 three.js1.2 react.js 2、three.js React结语 1、简介 1.1 three.js Three.js 是一款 webGL(3D绘图标准)引擎,可以运行于所有支持 webGL 的浏览器。Three.js 封装了 webGL 底层的 API ,为我们提供了高级的…

Javascript基础语法详解

面向对象的语言.脚本语言,不需要编译,浏览器解释即可运行 .用于控制网页的行为.浏览器的source可以打断点调试, console输入代码可以执行 use strict指令: 在“严格模式”下运行js代码, 防止意外创建全局变量等, 提高代码安全性和执行效率. 使用: 全局严格模式:…

Qt 信号与槽机制

1. 信号 和 槽 Qt 信号与槽机制 是一种用于对象间通信的低耦合设计模式,核心思想是:当某个信号触发,自动调用预先关联的处理函数(槽函数)。 在 Qt 中,如果一个类需要使用信号与槽机制,则该类必…

Redis 数据结构及使用场景介绍

Redis 是一种高性能的键值存储数据库,支持多种数据结构,每种数据结构都有其独特的特点和使用场景。以下是 Redis 的主要数据结构及其深入解析和实际使用场景介绍: 1.String(字符串) 特点 • 最基本的数据结构&#…

3.1 Spring Boot性能优化:从线程池调优到JVM参数配置

markdown # Spring Boot性能优化:从线程池调优到JVM参数配置![性能优化](https://img-blog.csdnimg.cn/direct/0a3e3d2e4d4b4f7f9c3d4a5b0e8d4e4c.png)## 引言 在微服务架构中,Spring Boot作为主流开发框架,其性能直接影响系统的吞吐量和响应…

ICLR2025 | SLMRec: 重新思考大语言模型在推荐系统中的价值

note 问题背景:序列推荐(SR)任务旨在预测用户可能的下一个交互项目。近年来,大型语言模型(LLMs)在SR系统中表现出色,但它们巨大的规模使得在实际平台中应用变得低效和不切实际。 研究动机&…

Linux 中的管道:进程间数据传输的利器

个人主页:chian-ocean 文章专栏-Linux 前言 **进程间通信(Inter-Process Communication, IPC)**是指在操作系统中,不同进程之间交换数据或信息的方式。由于每个进程都有自己的地址空间,直接访问另一个进程的数据是不…