前言
正则表达式(regular expression,简称 regex)是一种用于匹配、查找和替换字符串的强大工具,广泛应用于文本处理、数据验证、日志分析等场景。它通过特定的语法规则描述字符串的模式,让复杂的字符串操作变得简洁高效。本文将从基本概念出发,结合实例讲解常用语法,并通过 java 代码演示其实际应用。
一、正则表达式基本概念
1. 核心定义
正则表达式是由普通字符(如字母、数字)和元字符(具有特殊含义的字符,如*、+)组成的字符串模式,用于匹配目标字符串中符合该模式的子串。
例如,正则表达式\d{3}-\d{4}可以匹配类似123-4567的字符串,其中\d代表数字,{3}表示匹配 3 次,-是普通字符。
2. 核心作用
- 字符串匹配:判断目标字符串是否符合特定模式(如验证手机号、邮箱格式)。
- 字符串查找:从文本中提取符合模式的子串(如从日志中提取所有 ip 地址)。
- 字符串替换:替换文本中符合模式的内容(如过滤敏感词、统一格式)。
二、正则表达式常用语法与示例
正则表达式的语法由「普通字符」「元字符」「量词」「分组」等组成,以下是最常用的语法规则及示例。
1. 普通字符与转义字符
- 普通字符:直接匹配自身,如字母a-z、数字0-9、符号-等。
示例:正则abc可匹配字符串abc、aabc(匹配其中的abc子串)。
- 转义字符:对于具有特殊含义的元字符(如., *, (),需用\转义后才能匹配其本身。
示例:正则www\.baidu\.com可匹配www.baidu.com(.在正则中代表 “任意字符”,转义后才匹配实际的.)。
2. 常用元字符
元字符是正则表达式的核心,代表特定的匹配规则,以下是高频元字符:
元字符 | 含义 | 示例 | 匹配结果 |
. | 匹配任意单个字符(除换行) | a.b | aab、acb、a1b |
\d | 匹配单个数字(0-9) | \d{2} | 12、99 |
\d | 匹配非数字字符 | \d | a、!、 (空格) |
\w | 匹配字母、数字、下划线 | \w+ | hello、user123 |
\w | 匹配非字母 / 数字 / 下划线 | \w | @、#、& |
\s | 匹配空白字符(空格、制表符) | a\sb | a b、a\tb(制表符) |
^ | 匹配字符串开头 | ^hello | hello world(开头匹配) |
$ | 匹配字符串结尾 | world$ | hello world(结尾匹配) |
3. 量词:控制匹配次数
量词用于指定元字符或分组的匹配次数,常用量词如下:
量词 | 含义 | 示例 | 匹配结果 |
* | 匹配 0 次或多次 | ab* | a、ab、abb |
+ | 匹配 1 次或多次 | ab+ | ab、abb、abbb |
? | 匹配 0 次或 1 次 | ab? | a、ab |
{n} | 匹配恰好 n 次 | a{3} | aaa |
{n,} | 匹配至少 n 次 | a{2,} | aa、aaa、aaaa |
{n,m} | 匹配 n 到 m 次 | a{2,3} | aa、aaa |
4. 分组与范围
- 分组:用()将多个字符组成一个整体,配合量词使用。
示例:(ab)+可匹配ab、abab、ababab(ab作为整体重复)。
- 范围:用[]指定匹配范围,支持单个字符或字符区间。
示例:
- [a-z]:匹配任意小写字母;
- [a-z0-9]:匹配任意大写字母或数字;
- [^0-9]:匹配非数字字符(^在[]内表示 “非”)。
5. 实际场景示例
结合以上语法,以下是常见业务场景的正则表达式示例:
场景 | 正则表达式 | 说明 |
手机号验证 | ^1[3-9]\d{9}$ | 以 1 开头,第 2 位为 3-9,后 9 位为数字 |
邮箱验证 | ^[a-za-z0-9_]+@[a-za-z0-9]+\.[a-za-z]{2,}$ | 用户名 +@+ 域名 + 后缀(如.com、.cn) |
身份证号(18 位) | ^\d{17}[\dxx]$ | 前 17 位为数字,最后一位为数字或 x/x |
提取 ip 地址 | \d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3} | 匹配 ipv4 地址(简化版,未严格校验范围) |
三、java 中正则表达式的实现
java 通过java.util.regex包提供正则表达式支持,核心类包括pattern(编译正则表达式)和matcher(执行匹配操作),同时string类也提供了简化方法(如matches()、replaceall())。
1. 核心类说明
- pattern:表示编译后的正则表达式模式,线程安全。通过pattern.compile(regex)编译正则字符串。
- matcher:表示匹配器,通过pattern.matcher(input)获取,用于对输入字符串执行匹配、查找、替换等操作。
2. 常用操作示例
示例 1:字符串匹配(验证格式)
验证输入是否为合法手机号:

示例 2:字符串查找(提取内容)
从文本中提取所有 ip 地址:

示例 3:分组匹配(提取复杂结构)
从字符串中提取姓名和年龄(格式如 “姓名:张三,年龄:25”):

四、正则表达式使用注意事项
- 转义字符处理:java 中\本身需要转义,因此正则中的\d在 java 字符串中需写为\\d(如示例中的 ip 正则)。
- 性能优化:频繁使用的正则表达式建议提前编译为pattern对象(pattern是线程安全的,可复用),避免多次编译浪费资源。
五、总结
正则表达式是处理字符串的 “瑞士军刀”,掌握其基本语法后,能极大提升文本处理效率。本文从概念出发,讲解了常用语法和场景示例,并通过 java 的pattern、matcher类及string相关方法演示了实际应用。
到此这篇关于正则表达式概念、示例与java实现完全入门指南的文章就介绍到这了,更多相关正则表达式与java实现内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论