欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > 正则表达式快速入门

正则表达式快速入门

2025/3/12 10:52:58 来源:https://blog.csdn.net/m0_73366745/article/details/146175692  浏览:    关键词:正则表达式快速入门

原文链接: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分钟入门教程

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词