正则表达式在Java中的应用(补充)

article/2025/7/6 17:01:33

正则表达式在Java中的应用

Java通过java.util.regex包提供正则表达式支持,核心类包括PatternMatcherPattern用于编译正则表达式模式,Matcher用于匹配操作。基本语法遵循标准正则规则,如\d匹配数字,\w匹配单词字符。

Pattern pattern = Pattern.compile("\\d+");
Matcher matcher = pattern.matcher("123");
boolean matches = matcher.matches(); // 返回true

正则表达式常用于验证输入(如邮箱、电话号码)、字符串分割和替换。Java还支持分组捕获、贪婪/懒惰匹配等高级特性。注意转义字符需双重反斜杠(\\)表示。

常见使用场景

  • 数据验证:^[A-Za-z0-9+_.-]+@[A-Za-z0-9.-]+$匹配邮箱
  • 字符串替换:replaceAll("\\s+", " ")合并多余空格
  • 提取数据:group()方法获取匹配的子串

正则表达式实际应用示例:

手机号码正则表达式

// 手机号码正则表达式
String regex1 = "1[3-9]\\d{9}";
System.out.println("13112345678".matches(regex1)); // true - 11位且符合规则
System.out.println("13712345667".matches(regex1)); // true - 11位且符合规则
System.out.println("13945679027".matches(regex1)); // true - 11位且符合规则
System.out.println("139456790271".matches(regex1)); // false - 超过11位

规则说明:
匹配以1开头,第二位为3-9的数字,后面跟随9位任意数字的组合(总长度11位)


座机号码正则表达式

// 座机号码正则表达式
String regex2 = "0\\d{2,3}-?[1-9]\\d{4,9}";
System.out.println("020-2324242".matches(regex2)); // true - 带区号和分隔符
System.out.println("02122442".matches(regex2)); // true - 无分隔符但格式正确
System.out.println("027-42424".matches(regex2)); // true - 短号码带分隔符
System.out.println("0712-3242434".matches(regex2)); // true - 长区号带分隔符

规则说明:
匹配以下结构:

  • 区号部分:以0开头,后接2-3位数字
  • 可选分隔符:-可出现0次或1次
  • 号码部分:首位非0,总长度5-10位数字

邮箱正则表达式

// 邮箱正则表达式
String regex3 = "\\w+@[\\w&&[^_]]{2,6}(\\.[a-zA-Z]{2,3}){1,2}";
System.out.println("3232323@qq.com".matches(regex3)); // true - 标准邮箱格式
System.out.println("zhangsan@itcast.cnn".matches(regex3)); // true - 二级域名
System.out.println("dlei0009@163.com".matches(regex3)); // true - 数字前缀
System.out.println("dlei0009@pci.com.cn".matches(regex3)); // true - 多级域名

规则说明:
匹配以下结构:

  1. 用户名部分:\w+(字母/数字/下划线)
  2. @符号:必须存在
  3. 域名部分:
    • 主域名:2-6位字母或数字(不含下划线)
    • 后缀:.com.cn等(2-3位字母)
    • 可包含二级后缀(如.com.cn

关键正则符号说明

\\d    // 匹配数字字符
[3-9]  // 匹配3到9之间的数字
?      // 匹配前一个元素0次或1次
+      // 匹配前一个元素1次或多次
{n}    // 匹配前一个元素恰好n次
\\w    // 匹配字母/数字/下划线
&&[^_] // 逻辑与且排除下划线

注:测试用例覆盖了合法和非法边界情况,正则表达式通过matches()方法实现完全匹配验证。

以下为一段严格审查身份证的正则表达式的运用:

// 身份证号码的严格校验
// 编写正则的小心律:
// 第一步:按照正确的数据进行拆分
// 第二步:找每一部分的规律,并编写正则表达式
// 第三步:把每一部分的正则拼接在一起,就是最终的结果
// 书写的时候:从左到右去书写。// 410881 1993 02 28 457X
// 前面6位:省份,市区,派出所等信息 第一位不能是0,后面5位是任意数字 [1-9]\d{5}
// 年的前半段:18 19 20 (18|19|20)
// 年的后半段:任意数字出现两次 \d{2}
// 月份: 01 ~ 09 10 11 12 (0[1-9]|1[0-2])
// 日期: 01 ~ 09 10~19 20~29 30 31 (0[1-9]|[12]\d|3[01])
// 后面四位:任意数字出现3次 最后一位可以是数字也可以是大写或者小写x [\d(3)[1-9a-zA-Z]]String regex6 = "[1-9]\\d{5}(18|19|20)\\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])(\\d{3}[1-9a-zA-Z])";
System.out.println("4108811993022845X".matches(regex6));
System.out.println("510881197609223099".matches(regex6));
System.out.println("150401198107053387X".matches(regex6));
System.out.println("130133197204039024".matches(regex6));
System.out.println("430102197606046442".matches(regex6));

小结:


http://www.hkcw.cn/article/CxjuDIgxMj.shtml

相关文章

C++ 内存泄漏检测器设计

文章目录 1. C中的动态内存分配2. 什么是内存泄漏3. 内存泄漏的代码案例4. 内存泄漏检查器的设计模块1:位置信息捕获:模块2:内存分配跟踪:模块3:内存释放跟踪:模块4:泄漏记录存储:模…

线程安全与线程池

概念:多个线程,同时操作同一个共享资源的时候,可能会出现业务安全问题。 出现线程安全问题的条件,原因:1.存在多个线程在同时执行 2.同时访问一个共享资源 3.存在修改该共享资源 线程同步:是线程安全…

网络安全的学习路线是怎么样的?

我是几乎完全自学的,十年前从双非跨专业考研到中科大软件学院网络安全专业,读研之前,C语言是自学的,数据结构是自学的,计算机网络是自学的,操作系统是自学的,微机原理是自学的。为了让我们能跟上…

每日算法-250602

每日算法学习记录 - 250602 今天学习和复习了两道利用前缀和与哈希表解决的子数组问题,特此记录。 560. 和为 K 的子数组 题目 思路 本题的核心思想是利用 前缀和 与 哈希表 来优化查找过程。 解题过程 题目要求统计和为 k 的子数组个数。 我们首先预处理出一…

Hadoop学习笔记

(1)Hadoop概述 Hadoop是一个开源的分布式计算和存储框架,用于处理大规模数据集(大数据)的并行处理。它由Apache基金会开发,核心设计灵感来自Google的MapReduce和Google文件系统(GFS&#xff09…

PCIe—TS1/TS2 之Polling.Configuration (二)

前文 在 Polling.Configuration 次状态中,发送⽅停⽌发送 TS1 序列,转⽽发送 TS2 序列,TS2 序列中的链路和通道(lane)字段仍然使⽤填充字段填充。 该状态中,发送⽅转⽽发送 TS2 的⽬的是通知链路对端的设备…

如何增加 cPanel中的 PHP 最大上传大小?

PHP通过限制文件上传大小来保护服务器性能,但默认限制对于许多现代网页应用来说太低了。当PHP应用程序显示错误信息,要求你增加PHP的最大上传文件大小时,你可能会遇到这个问题。有多种方法可以提高上传限制,包括直接编辑PHP配置文…

linux——文件系统

被打开的文件放到内存中没有被打开的文件放到磁盘 1. 硬件-->磁盘 磁盘的存储基本单位:扇区(512字节) 512字节写入到磁盘,磁盘如何转动: 磁盘写入的时候是向柱面进行批量写入的 CHS地址:cylind heade…

HBM的那些事2 写操作

搞懂写,把下面这幅图搞定,基本上就掌握了7成了。 术语解释 WL : write latency,说的是命令到发送数据的WDQS的间隔,注意这里不包含twpre1的时间,通过配置MR1实现。 twpre1: 在发送写数据之前,W…

B1039 PAT乙级JAVA题解 到底买不买

小红想买些珠子做一串自己喜欢的珠串。卖珠子的摊主有很多串五颜六色的珠串,但是不肯把任何一串拆散了卖。于是小红要你帮忙判断一下,某串珠子里是否包含了全部自己想要的珠子?如果是,那么告诉她有多少多余的珠子;如果…

力扣HOT100之多维动态规划:62. 不同路径

这道题用二维dp数组来做相当简单,是一道入门题。直接上动规五部曲: 1.确定dp[i][j]的含义:从起点到位置为[i][j]处的路径总数 2.确定递推公式 dp[i][j] dp[i - 1][j] dp[i][j - 1]; 3.dp数组初始化 dp[0][j] 1;dp[i][0] 1; 4.确定遍历顺序…

css呼吸灯

效果图 只是简单的呼吸效果,您按照需求自己拓展即可。 代码 keyframes light{from{opacity: 1;}to{opacity: 0.2;}}使用 .view{animation-name: light;animation-duration: 1s;animation-timing-function: linear;animation-iteration-count: infinite;animation-…

AI入门——AI大模型、深度学习、机器学习总结

以下是对AI深度学习、机器学习相关核心技术的总结与拓展,结合技术演进逻辑与前沿趋势,以全新视角呈现关键知识点 一、深度学习:从感知到认知的技术革命 核心突破:自动化特征工程的范式变革 深度学习通过多层神经网络架构&#x…

python训练营打卡第42天

Grad-CAM与Hook函数 知识点回顾 回调函数lambda函数hook函数的模块钩子和张量钩子Grad-CAM的示例 作业:理解下今天的代码即可 1.回调函数 def handle_result(result):"""处理计算结果的回调函数"""print(f"计算结果是: {resul…

ISO18436-2 CATII级振动分析师能力矩阵

ISO18436-2021是当前针对针对分析师的一个标准,它对振动分析师的能力和知识体系做了4级分类,这里给出的是一家公司响应ISO18436的CATII级标准,做的一个专题培训的教学大纲。摘自: 【振動噪音產學技術聯盟】04/19-23 ISO 18436-2…

YARN应用日志查看

YARN应用日志查看 1、页面查看2、命令行查看1、页面查看 1.1、YARN ResourceManager Web UI Spark on YARN时,YARN的资源管理器(ResourceManager)和历史服务器(History Server)提供了强大的日志和监控功能,可以帮助用户查看和管理Spark作业 访问YARN ResourceManager的…

免费酒店管理系统+餐饮系统+小程序点餐——仙盟创梦IDE

酒店系统主屏幕 房间管理 酒店管理系统的房间管理,可实现对酒店所有房间的实时掌控。它能清晰显示房间状态,如已预订、已入住、空闲等,便于高效安排入住与退房,合理分配资源,提升服务效率,保障酒店运营有条…

29 C 语言内存管理与多文件编程详解:栈区、全局静态区、static 与 extern 深度解析

1 C 语言内存管理概述 1.1 内存分区模型解析 在 C 语言程序中,内存的合理管理是确保程序高效运行的核心。为了深入理解变量的作用域、生命周期及内存分配机制,我们需要先掌握内存分区模型。C 语言将内存划分为以下几个核心区域: 栈区&#…

JavaScript 性能优化实战:从原理到框架的全栈优化指南

在 Web 应用复杂度指数级增长的今天,JavaScript 性能优化已成为衡量前端工程质量的核心指标。本文将结合现代浏览器引擎特性与一线大厂实践经验,构建从基础原理到框架定制的完整优化体系,助你打造高性能 Web 应用。 一、性能优化基础&#x…

2025年十大AI幻灯片工具深度评测与推荐

我来告诉你一个好消息。 我们已经亲自测试和对比了市面上最优秀的AI幻灯片工具,让你无需再为选择而烦恼。 得益于AI技术的飞速发展,如今你可以快速制作出美观、专业的幻灯片。 这些智能平台的功能远不止于配色美化——它们能帮你头脑风暴、梳理思路、…