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

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

正则表达式在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.xdnf.cn/news/766351.html

相关文章:

  • 初识CSS3
  • OIer常用的软件
  • 【001】利用github搭建静态网站_essay
  • 并发编程的源头
  • Flink CDC将MySQL数据同步到数据湖
  • C++ 标准输入输出 -- <iostream>
  • 【深度学习新浪潮】多模态模型如何处理任意分辨率输入?
  • LazyOwn RedTeam/APT 框架是第一个具有人工智能驱动的 CC 的 RedTeam 框架
  • 6.linux文本内容显示cat,more,less
  • 第七部分:第五节 - 数据关系与进阶查询 (TypeORM):仓库里复杂的配料组合
  • 第1篇:数据库中间件概述:架构演进、典型方案与应用场景
  • 微服务常用日志追踪方案:Sleuth + Zipkin + ELK
  • SCAU8642--快速排序
  • C++ 内存泄漏检测器设计
  • 7.文本内容处理sort,uniq,out,cat,comm,diff
  • NX869NX874美光固态颗粒NX877NX883
  • [HTML5]快速掌握canvas
  • 在 Linux 服务器上无需 sudo 权限解压/打包 .7z 的方法
  • C++ - 数据处理之数值转不同进制的字符串(数值转十进制字符串、数值转八进制字符串、数值转二进制字符串、数值转十六进制字符串)
  • 黑马程序员C++核心编程笔记--4 类和对象--多态
  • 《信号与系统》--期末总结V1.0
  • linux 的devmem2 调式使用说明
  • Vue-3-前端框架Vue基础入门之VSCode开发环境配置和Tomcat部署Vue项目
  • 常见ADB指令
  • Vue-4-前端框架Vue基础入门之Vue的常用操作
  • opencv调用模型
  • 渗透实战PortSwigger Labs AngularJS DOM XSS利用详解
  • 【MySQL】视图与用户管理
  • linux——文件系统
  • 使用API网关Kong配置反向代理和负载均衡