Java——正则表达式

1、什么是正则表达式

一个正则表达式,就是用某种模式去匹配字符串的一个公式。很多人因为它们看上去比较古怪而且复杂所以不敢去使用,不过,经过练习后,就觉得这些复杂的表达式写起来还是相当简单的,而且,一旦你弄懂它

们,你就能把数小时辛苦而且易错的文本处理工作缩短在几分钟(甚至几秒钟)内完成。

2、正则表达式的语法

正则表达式的分类

  • 特殊字符(转义字符'|')

  • 字符匹配符

  • 选择匹配符

  • 限定符

  • 定位符

  • 分组组合和反向引用符

3、元字符(Metacharacter)

3.1转义号 \\

\\符号说明:在我们使用正则表达式去检索某些特殊字符的时候,需要用到转义符号,否则检索不到结果,甚至会报错的。

案例: 用$ 去匹配 "abc("会怎样?用(去匹配"abc("会怎样?

在Java的正则表达式中,两个\\代表其他语言中的一个\。

需要使用转义字符的场景

Java 复制代码
. * + () $ / \ ? [] ^ {}

3.2、字符通配符

符号 符号说明 示例 解释
[] 可接收的字符列表 [efgh] e、f、g、h中的任意一个字符
[^] 不可接收的字符列表 [^abc] 除a、b、c之外的任意1字符,包括数字和特殊符号
- 连字符 A-Z 任意单个大写字母
. 匹配除\n以外的任何字符 a..b 以a开头,b结尾,中间包括2个任意字符长度为4的字符串
\\d 匹配单个数字字符,相当于[0-9] \\d{3}(\\d)? 包含3个或4个数字的字符串
\\D 匹配非单个数字字符,相当于[^0-9] \\D(\\d)* 以单个非数字字符开头,后接任意个数字字符串
\\w 匹配单个数字、大小写字母字符,相当于[0-9a-zA-Z] \\d{3}\\w{4} 以3个数字字符开头的长度为7的数字字符串
\\W 匹配非单个数字、大小写字母字符,相当于[^0-9a-zA-Z] \\W+\\d{2} 以至少1个非数字字母字符开头,2个数字字符结尾的字符串

3.3、选择通配符|

在匹配某个字符串的时候是选择性的,即:既可以匹配这个,又可以匹配那个,这时你需要用到选择匹配符号(|)。

符号 符号说明 示例 解释
` ` 匹配`" "`之前或之后的表达式

3.4、限定符

符号 含义 示例 说明 匹配输入
* 指定字符重复0次或n次(无要求,零到多) (abc)* 仅包含任意个abc的字符串,等效于\w* abc abcabcabc
+ 指定字符重复1次或n次(至少一次,1到多) m+(abc)* 以至少1个m开头,后接任意个abc的字符串 m mabc mabcabc
? 指定字符重复0次或1次(最多一次,0到1) m+abc? 以至少1个m开头,后接ab或abc的字符串 mab mabc mmabc
{n} 只能输入n个字符 [abcd]{3} 由abcd中字母组成的任意长度为3的字符串 abc dbc adc
{n,} 指定至少n个匹配 [abcd]{3,} 由abcd中字母组成的任意长度不小于3的字符串 aab dbc aaabdc
{n,m} 指定至少n个但不多于m个匹配 [abcd]{3,5} 由abcd中字母组成的任意长度不小于3,不大于5的字符串 abc abcd aaaaa bcdab

3.5、定位符

符号 含义 示例 说明 匹配输入
^ 指定起始字符 ^[0-9]+[a-z]* 以至少1个数字开头,后接任意个小写字母的字符串 123
$ 指定结束字符 ^[0-9]\\-[a-z]+$ 以一个数字开头后接连接符"-",并以至少1个小写字母结尾的字符串 m mabc mabcabc
\\b 匹配目标字符串的边界 abc\\b 这里说的字符串的边界指的是子串间有空格,或者是目标字符串的结束位置 cabcd cabc ccabc
\\B 匹配目标字符串的非边界 abc\\B 和\\b的含义刚刚相反 cabcd cabc ccabc

3.6、分组

常用分组构造形式 说明
(pattern) 非命名捕获。捕获匹配的子字符串。编号为零的第一个捕获是由整个正则表达式模式匹配的文本,其它捕获结果则根据左括号的顺序从1开始自动编号。
(?<name>pattern) 命名捕获。将匹配的子字符串捕获到一个组名称或编号名称中。用于name的字符串不能包含任何标点符号,并且不能以数字开头。可以使用单引号替代尖括号,例如:(?'name')
(?:pattern) 匹配 pattern 但不捕获该匹配的子表达式,即它是一个非捕获匹配,不存 储供以后使用的匹配。这对于用"or"字符`(
(?=pattern) 它是一个非捕获匹配。例如,`'Windows (?=95
`(? pattern)`

3.7、修饰符

符号 含义 示例 说明 匹配输入
i 不区分大小写 将匹配设置为不区分大小写,搜索时不区分大小写: A和 a 没有区别 123
g 全局匹配 abc/g 查找所有的匹配项 Google abc tana abc
m 多行匹配 ^abc/gm 使边界字符 ^ 和 $ 匹配每一行的开头和结尾,记住是多行,而不是整个字符串的开头和结尾 abcdf taobao abccc
s 特殊字符圆点 . 中包含换行符 \n /abc./s 默认情况下的圆点 . 是匹配除换行符 \n 之外的任何字符,加上 s 修饰符之后,. 中包含换行符 \n wert abc cba
相关推荐
十二同学啊几秒前
Python 工程化详解:项目结构、依赖管理、代码质量、测试与部署
java·开发语言·python
打工仔折腾 AI1 分钟前
鸿蒙移动端直连 Windows 远程桌面配置与性能调优实践
人工智能·windows·后端·python·华为·性能优化·harmonyos
YIN_尹4 分钟前
【git原理与使用】git基本操作及底层原理(一)
java·git·elasticsearch
Frag0ut5 分钟前
Notepad++ 正则表达式完全手册:文本处理的终极武器(2026实战版)
正则表达式·notepad++·数据清洗·日志分析·正则替换·提取ip·正则表达式实战
程序员飞哥14 分钟前
AI 编程额度怎么用才不浪费?
java·前端·后端
yh弓长19 分钟前
Spring MVC 的请求链路
java·spring·mvc
拆房老料20 分钟前
【第四部分:Agentic 智能体设计模式】17. Agent 路由模式详解:从意图识别到动态模型选择
java·设计模式·ai编程·策略模式
樱花落木兰33 分钟前
Redis 消息队列的可靠性演进:从 List、Pub/Sub 到 Stream 消费者组,以及 8.x 版本改变了什么
java·开发语言·经验分享·redis·分布式·python·软件工程
mumu15740 分钟前
快速上手大模型推理vllm
人工智能·python·大语言模型·agent·vllm
明天会有多晴朗40 分钟前
从零手写 Transformer!一个 Python 文件跑通英译中(PyTorch 附完整源码)
人工智能·pytorch·python·深度学习·transformer