正则表达式
正则表达式介绍:
正则表达式是一种用于匹配和操作文本的工具
常用于文本查找、文本替换、文本格式检验等场景
正则表达式不仅写代码会使用,常见的文本编辑软件(如notepad++)也支持正则表达式搜索或者替换的
正则表达式实质上是一段文本,或者说是一条字符串
1、检验字符串是否符合邮箱格式
正则表达式:^[\w\.\-\+]+@[\w\.-]+\.\w+$
校验字符串(通过):test1-pass@163.com
检验字符串(不通过):test1-pass@.com
2、匹配文本中所有字母a开头的单词
正则表达式:\b[aA]\w*\b
匹配文本:Apple is a fruit, and it starts with an A
日常办公开发中,正则表达式可用于字符串或者文本的查找、替换、格式校验
在notpad++查找所有包含a的字符

正则表达式的优缺点:
优点:功能强大,有效缩减代码量,提高维护性
缺点:性能较慢,每次执行程序都需要重新解析正则表达式
正则表达式常用语法:
下面为最为通用的正则表达式标准
正则表达式的匹配行为是由元字符决定的:
1、普通字符:明确的关键字
普通字符可理解为明确的关键字,主要包括文字字符、符号
-文字字符指的是英文字母、数字、中文这些字符
-符号指的是@、%、_这些符号字符
文字字符在正则表达式中直接写就可以了:
例如:匹配文本中的get:I need to get a new boot
在正则表达式中一部分符号需要转义:
需要转义的特殊符号:
需要转义的符号字符
|
需要转义的符号字符
|
.
|
*
|
\
|
+
|
[
|
?
|
]
|
{
|
(
|
}
|
)
|
|
|
^
|
$
|
例如:匹配文本中的get*:
正则表达式:get\*
匹配文本:I need to get* a new book
还有一些不太常用的字符,如非打印字符、unicode编码值等
非打印字符
|
说明
|
其他字符
|
说明
|
\n
|
换行符
|
\x00
|
16进制转义值,2位16进制数,如\x20表示空格
|
\r
|
回车符
|
\000
|
8进制转义值,3位8进制数,如\040表示空格
|
\f
|
换页符
|
\u0000
|
unicode编码值,4位16进制数,如\u0000表示空格
|
\t
|
制表符
|
||
\v
|
垂直制表符
|
2、字符集合:关键字的取值范围
2.1 单个关键字的值的范围,包含在一对[]中间
-如[eo]表示匹配a或e
如下在view命令行匹配:

字符集合适合明确某个字符的范围的模糊匹配,则这多个关键字中只有个别字符存在差异的情况
字符集合是单个关键字的值的范围,若差异不仅仅在一个字符上,则不适合采用字符集合
示例:匹配文本中的get和goat
正则表达式语法:g(e|oa)t

字符集合可以简化连续值的范围,使用-符号
如[a-d]等价于[abcd]
如[a-dz]等价于[abcdz]
如[_\-]字符集合中匹配-需要转义
示例:g[a-c]t
2.2 设置字符集合位排除在外的值范围,使用^符号,脱子符号
如[^a-b]等价于除去a、b、c、d以外的字符都可以
如[^@\+]等价于除去@、+以外的字符都可以
示例:g[^o]t
3、限定符:给前一个字符追加出现次数范围
3.1 给前一个字符追加出现次数的范围
常用的限定符位*、+、?
*表示匹配零次或多次
示例:匹配文本中的god、good、gooood的单词
正则表达式:go+d
3.2 使用{}标注具体次数
{3}表示出现3次
{3,}表示出现3次或以上
{3,6}表示出现3-6次
如:go{2,3}d
3.3 模糊搜索
限定符前面位模糊搜索时,会发生贪婪匹配的问题
正则表达式(贪婪匹配):g[a-z]+d,贪婪匹配会匹配到gadxxgod
正则表达式(非贪婪匹配):g[a-z]+?d,非贪婪匹配不会匹配到gadxxgod
4、定位符:标记匹配位置的元字符
标记匹配位置的元字符
定位符只有四个:
^表示字符串开始的位置
$表示字符串结束的位置
\b表示单词边界,字符与空格间的位置
\B表示非单词边界
示例:正则表达式:^1[0-9]{10}$,用来匹配手机号码
5、子表达式:内嵌的子正则表达式
子表达式 内嵌的子正则表达式,包含在一对()中
子表达式与正则表达式语法相同,且允许子表达式内再嵌套子表达式
示例:g(e|oa)t
5.1 子表达式可看成一个整体
如:(got)+,则可匹配文本gotgot
5.2 子表达式用|分割多个子表达式
5.3 匹配文本
如([a-z])\1([a-z])\2,()表示子表达式,标记一个子匹配内容,[a-z]表示a-z的字符集合,\1表示与第一个子匹配项相同的内容,\2表示与第二个子匹配项相同的内容

5.4 预查匹配项
5.4.1 (?=)表示正向肯定预查
放在表达式末尾,如:
ab(?=c)匹配abc,不匹配ab_
5.4.2 (?!)表示正向否定预查
放在表达式末尾,如:
ab(?!c)表示不匹配abc,匹配ab
5.4.3 (?<=)表示反向否定预查
放在表达式开头,如:
(?<=a)bc表示匹配abc,不匹配_bc
5.4.4 (?<!)表示反向否定预查
放在表达式开头,如:
(?<!a)bc表示不匹配abc,匹配_bc
6、省略符:为了简化正则表达式的元字符
省略符是为了简化正则表达式而存在的元字符,以\开头
正则表达式\d+等效于[0-9]+,\d表示0-9数字的省略符,+表示出现1次或者多次的限定符
常用的省略符如下所示:
省略符
|
等效
|
说明
|
.
|
[^\n\r]
|
匹配除换行符之外的任何单个字符
|
\d
|
[0-9]
|
匹配一个数字字符
|
\D
|
[^0-9]
|
匹配一个非数字字符
|
\s
|
[\f\n\r\t\c\v]
|
匹配任何空白字符,包含空格/制表符/换页符等
|
\S
|
[^\f\n\r\t\c\v]
|
匹配任何非空白字符
|
\w
|
[A-Za-Z0-9_]
|
匹配一个字符/数字/下划线字符
|
\W
|
[^A-Za-Z0-9_]
|
匹配一个非字符/数字/下划线字符
|
7、修饰符:指定匹配策略
修饰符是指定匹配策略的,不是正则表达式的一部分,如不区分大小写,多行匹配等
修饰符可叠加使用,某些正则表达式代码库可能存在特别的修饰符
常用4种修饰符:
修饰符
|
说明
|
i
|
将匹配设置为不区分大小写,如A和a没有区别
|
g
|
查找所有的匹配项
|
m
|
多行匹配
|
s
|
默认情况下的圆点.是匹配除换行符\n之外的任何字符,加上s修饰后,.中包含换行符\n
|
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!