正则表达式快速入门

原文链接:https://kashima19960.github.io/2025/03/10/正则表达式快速入门/

前言

我写这篇文章,用来记录我平时使用正则表达式的方法,这样我在分享知识给大家的同时,也复习了一遍正则表达式。在你学习某个知识的时候,千万不要去像阅读手册一般去进行学习,因为手册的内容虽然非常详细且全面,但是其实你实际运用到的内容并不会很多,这个就是二八定律,正则表达式20%的内容,就足以够覆盖80%的使用场景了

什么是正则表达式

正则表达式的定义如下

正则表达式是一组由字母和符号组成的特殊文本, 它可以用来从文本中找出满足你想要的格式的句子.

首先,你难道不觉得 "正则表达式" 这个名字莫名奇妙,难以理解吗?正则表达式的英文原文是 "Regular expression"(简称 regex 或 regexp)) 其中把regular换一个翻译------规则的,有规律的,所以Regular expression的意思就是有规则的表达式。怎么样?是不是比啥正则表达式好懂多了。

正则表达式的作用

正则表达式的作用,用一句话概括就是------精确匹配,比如

  • 文本搜索和替换
  • 表单验证(如邮箱、手机号验证)
  • 数据提取
  • 字符串解析

当你注册一个网站,一般都会对你的密码强度进行验证,或者强制要求你必须满足某种"规则",不然不让你通过注册

这个验证方法就是通过正则表达式实现的

练习平台

正则表达式是一种工具,所以学会工具的最好秘诀是要多练,这里我推荐两种练习的平台

在线

regex101: build, test, and debug regex

这个平台的使用很容易,上面是输入正则表达式,下面输出要匹配的字符串

离线

现在很多的编辑器基本都支持用正则表达式搜索文本,比如Vscode,你可以自己找找自己用的编辑器有没有这个功能

正则表达式常用知识

这里我只列举最常用的,当你学会这些常用的入门后,可以再去看看其他教程,学习一下更高级的用法

直接匹配

直接匹配其实就是普通的文本搜索,不使用任何正则表达式的语法

元字符

正则表达式是由各个元字符组合而成的,元字符跟他原本的含义没有什么关系,只是正则表达式的作者就这样定义的,所以不用去思考为啥这个元字符会是这个意思的问题,把常用元字符的含义记下来就行了

基本匹配元字符

符号 描述
. 匹配除换行符外的任意字符
^ 匹配字符串开头
$ 匹配字符串结尾
\ 当想要把元字符当作普通字符进行匹配,就需要用 \进行转义

.是元字符中最简单的例子.
.匹配任意单个字符, 但不匹配换行符.

例如,a.c 匹配 "abc", "adc", "a#c" 等

^ 匹配字符串开头,$匹配字符串结尾

例如,^hello 匹配以 "hello" 开头的字符串,world$ 匹配以 "world" 结尾的字符串

\用来将元字符转义,当想要匹配的字符串是元字符时,就需要转义,否则会被当作正则表达式被识别

例如,\.能够匹配字符串中的 . 而不是识别成元字符

数量限定符号

符号 描述 示例
* 匹配前面的表达式 0 次或多次 a* 匹配 "", "a", "aa", "aaa" 等
+ 匹配前面的表达式 1 次或多次 a+ 匹配 "a", "aa", "aaa" 等,但不匹配 ""
? 匹配前面的表达式 0 次或 1 次 colou?r 匹配 "color" 或 "colour"
{n} 匹配前面的表达式恰好 n 次 a{3} 只匹配 "aaa"
{n,} 匹配前面的表达式至少 n 次 a{2,} 匹配 "aa", "aaa" 等
{n,m} 匹配前面的表达式 n 到 m 次 a{2,4} 匹配 "aa", "aaa", "aaaa

这里我说几个我平时很常用的做法

.*,表示匹配任意字符0次或多次,说人话就是,单独使用会选中所有文本

然后呢,你可以用 .*结合 ^ 和 $,匹配特定字符串开头与特定字符串结尾的文本

比如用 ^hello.*world 匹配hello开头,world结尾的字符串

markdown引用图片的格式为 ![](),当你想删除一个markdown文件中的所有图片引用的时候,就可以使用 !\[.* 来匹配所有图片的引用

字符集和特殊字符

符号 描述 示例
[abc] 匹配方括号中的任意一个字符 [abc] 匹配 "a", "b" 或 "c"
[^abc] 匹配除方括号中字符外的任意字符 [^abc] 匹配 "d", "e" 等,但不匹配 "a", "b", "c"
[a-z] 匹配指定范围内的任意字符 [a-z] 匹配任意小写字母
\d 匹配数字,等价于 [0-9] \d{3} 匹配三个数字
\w 匹配字母、数字、下划线,等价于 [a-zA-Z0-9_] \w+ 匹配一个或多个字母/数字/下划线
\s 匹配空白字符(空格、制表符、换行等) \s 匹配一个空格
\D 匹配非数字字符 \D+ 匹配一个或多个非数字字符
\W 匹配非字母、数字、下划线的字符 \W 匹配如 "#", "@" 等符号
\S 匹配非空白字符 \S+ 匹配一个或多个非空白字符

特殊字符常用的就这几个,我教你怎么更容易记住

  • \d的是digital,数字的意思,
  • \w的是word,字词的意思
  • \s的是space,按下空格键会输入空格符,所以\s匹配空格符
  • 大写字母和小写字母互为反义词,\d匹配数字,那\D就用来匹配非数字

是不是很容易记,看着很多,其实都是有规律的

这里我介绍一下 ||或运算符就表示或, 用作判断条件.,可以结合 []一起使用,来实现敏感词过滤

fuck|shit|[傻煞沙][比笔逼叉缺吊碉雕]

结语

学会上面的这些,大多数的基础正则表达式,你基本都能看懂了,如果有些复杂的表达式有高级用法,等用到的时候再去看就行。以下是一些注意事项

  • 在现实中,如果不是非常特定的需求,我都是建议直接在网上用别人写好的正则表达式,因为正则表达式是由元字符构成的,一旦很长,可读性极其差,比如 ^(?!(.*?[A-Za-z0-9])\1{5,})(?=(?:.*?[A-Z]){2,})(?=(?:.*?[a-z]){2,})(?=(?:.*?[0-9]){2,})(?=.*?[!@#$%^&*()_+\-=\[\]{}|;':",.<>/?])(?!.*?(?:admin|root|password|123456|qwerty))(?!.*?(?:(.)\1{2,}))(?:[a-zA-Z0-9](?:[a-zA-Z0-9](?!-{2,}))*(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9](?!-{2,}))*)*\+?)?(?:[a-zA-Z0-9](?:[a-zA-Z0-9](?!-{2,}))*(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9](?!-{2,}))*)*)?@(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?\.)+[a-zA-Z0-9](?:[a-zA-Z0-9-]*[a-zA-Z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-zA-Z0-9-]*[a-zA-Z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])$
  • 让你学会正则表达式,最根本是让你能看懂,而不是让你能写出来,所以我都是建议你直接用ai写,然后根据ai给出的表达式对你特定的场景进行优化就行,等你看的多了,自然就能写出来了

这里我附上一些经典的参考资料

  1. 常用正则表达式大全
  2. 正则表达式30分钟入门教程 - deerchao - 博客园
  3. 简介 | 正则表达式30分钟入门教程
相关推荐
BeanInJ2 天前
JAVA字符串与正则表达式
java·正则表达式
林深的林2 天前
正则表达式(2)匹配规则
正则表达式
叶域2 天前
正则表达式(复习)
大数据·python·正则表达式
运维小贺4 天前
Nginx常用的模块
运维·nginx·正则表达式
Viooocc5 天前
正则表达式
正则表达式
vvilkim5 天前
开发中常用的正则表达式规则与应用
正则表达式
林深的林6 天前
正则表达式(1)
正则表达式
ThisIsClark7 天前
【玩转正则表达式】正则表达式常用语法汇总
正则表达式
ThisIsClark7 天前
【玩转正则表达式】替换与正则表达式的结合
正则表达式