正则表达式图文超详细总结不用死记硬背(上篇)

文章目录

️前言

一、认识正则表达式

二、正则表达式 —— 字符组

三、正则表达式 —— 非打印字符

1、误区:正则表达式中的换行符\n与回车符\r有什么区别呢?

四、正则表达式 —— 特殊字符

1、拓展点 —— 正则中\cx详解

五、正则表达式 —— 量词(限定符)

六、正则表达式 —— 定位符

七、正则表达式 —— 贪婪匹配与惰性匹配

1、几个常用的非贪婪匹配模板

八、正则表达式 —— 转义符

1、例一

2、例二

️结语:


前言

本次主要介绍了正则表达式的一些简单的基础栗子。

 ✅用到了一个好用的在线正则测试工具 :正则表达式在线测试 - 站长工具

 ✅推荐一个我正在用的好用刷题网站由此进入免费的刷题练习网站

一、认识正则表达式

正则表达式:又称规则表达式,(Regular Expression,在代码中常简写为regex、regexp或RE),是一种文本模式,包括普通字符(例如,a 到 z 之间的字母)和特殊字符(称为"元字符"),是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串,通常被用来检索、替换那些符合某个模式(规则)的文本,来获取自己想要内容。正则表达式虽然是繁琐的,但它是强大的,熟练掌握正则表达式除了能够效率外,还会给你带来绝对的成就感。现如今许多程序设计语言都支持利用正则表达式进行字符串操作。

二、正则表达式 —— 字符组

普通字符包括没有显式指定为元字符的所有可打印和不可打印字符。这包括所有大写和小写字母、所有的数字、标点符号和一些其他符号

字符 描述 实际应用
字符组
[ ... ] 匹配 [ ... ] 中的所有字符

例如:匹配字符串"helloworld234"所有的l h 2 o 字符

正则表达式图文超详细总结不用死记硬背(上篇)_第1张图片

[  ^... ] 匹配除了 [ ... ] 中字符的所有字符

例如:匹配字符串"helloworld234"除了l h 2 o 以外的所有字符

正则表达式图文超详细总结不用死记硬背(上篇)_第2张图片

[ A-Z ]


[A-Z]表示匹配所有的大写字母

例如:匹配字符串"#HelloWorld234"所有的大写字母

正则表达式图文超详细总结不用死记硬背(上篇)_第3张图片

[ a-z ] [A-Z]表示匹配所有的小写写字母

例如:匹配字符串"#HelloWorld234"所有的小写字母

正则表达式图文超详细总结不用死记硬背(上篇)_第4张图片

[ \s\S ] 匹配所有。\s 是匹配所有空白符,包括换行,\S 非空白符,不包括换行。

例如:匹配字符串"#HelloWorld234"所有的字符

正则表达式图文超详细总结不用死记硬背(上篇)_第5张图片

三、正则表达式 —— 非打印字符

那么正则表达式非打印字符是哪些,要解决这个问题,首先要知道什么是非打印字符,但从这个字面意思来看,就是不能打印的字符,那么在计算机程序范涛内,打印一般就是指的输出,例如C语言的printf语句,那么哪些是非打印字符呢,

下表列出了表示非打印字符的转义序列:

字符 描述 实际应用
非打印字符

\v

匹配一个垂直制表符。等价于 \x0b 和 \cK。

\t

匹配一个制表符。等价于 \x09 和 \cI

正则表达式图文超详细总结不用死记硬背(上篇)_第6张图片

\S

匹配任何非空白字符。等价于 [^ \f\n\r\t\v]

正则表达式图文超详细总结不用死记硬背(上篇)_第7张图片

\s

匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v]

正则表达式图文超详细总结不用死记硬背(上篇)_第8张图片

\r

匹配一个回车符。等价于 \x0d 和 \cM

\n

匹配一个换行符。等价于 \x0a 和 \cJ

正则表达式图文超详细总结不用死记硬背(上篇)_第9张图片

\f

匹配一个换页符。等价于 \x0c 和 \cL

\cx

匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或回车符。x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一个原义的 'c' 字符

1、误区:正则表达式中的换行符\n与回车符\r有什么区别呢?

  • 换行(newline)
  • 回车(return)

在windows系统下,回车换行符号是"\r\n",在Linux等系统下是没有"\r"符号,在解析文本或其他格式的文件内容时,常常要碰到判定回车换行的地方,这个时候就要注意既要定"\r\n"又要判定"\n"

四、正则表达式 —— 特殊字符

⼀个正则表达式可以由简单的字符构成,⽐如 /abc/,也可以是简单和特殊字符的组合,⽐如 /ab*c/ 。其中特殊字符也被称为元字符,在正则表达式中是具有特殊意义的专⽤符号,如 ^ 、$ 、+ 等。

特殊字符
字符 描述 实际应用
. 匹配除换行符(\n、\r)之外的任何单个字符。要匹配包括 '\n' 在内的任何字符,请使用像"(.|\n)"的模式 正则表达式图文超详细总结不用死记硬背(上篇)_第10张图片
|
a|b
匹配字符a或字符b
正则表达式图文超详细总结不用死记硬背(上篇)_第11张图片
\d 匹配一个数字字符。等价于 [0-9] 正则表达式图文超详细总结不用死记硬背(上篇)_第12张图片
\D 匹配一个非数字字符。等价于 [^0-9]
\w 匹配字母、数字、下划线。等价于'[A-Za-z0-9_]'。 正则表达式图文超详细总结不用死记硬背(上篇)_第13张图片
\W 匹配非字母、数字、下划线。等价于 '[^A-Za-z0-9_]'。
() 匹配括号内的表达式,也表示一个组 正则表达式图文超详细总结不用死记硬背(上篇)_第14张图片
[] 匹配字符组中的字符 正则表达式图文超详细总结不用死记硬背(上篇)_第15张图片
\cx 匹配由 x 指明的控制字符
\nm 标识一个八进制转义值或一个向后引用
\nml 如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-7),则匹配八进制转义值 nml。
\n 标识一个八进制转义值或一个向后引用。如果 \n 之前至少 n 个获取的子表达式,则 n 为向后引用。否则,如果 n 为八进制数字 (0-7),则 n 为一个八进制转义值
\un 匹配 n,其中 n 是一个用四个十六进制数字表示的 Unicode 字符
\xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长,正则表达式中可以使用 ASCII 编码

1、拓展点 —— 正则中\cx详解

\cx 匹配control + 控制字符,就是说 匹配由x指明的控制字符,这里的X是一个控制字符。匹配一个字符串的控制字符。

比如:
\cI 匹配 control + I,相当于 \t,
\cJ匹配 control + J,相当于 \n,

\cM匹配 control + M,相当于 \r,

\ca \cb \cc … 又分别匹配 control+a, control+b,control+c…,具体他们等价于什么,看运行的程序

控制字符(Control Character),出现于特定的信息文本中,表示某一控制功能的字符。

在计算中,一个控制字符或非打印字符,是一个代码标示(一个数字)是否在字符集,其自身也是书写字母来描述的。所有输出在32以下的ASCII表都是这个类型,包括

  • BEL(要求有声信号来响应终端的接收);

  • SYN(同步信号);

  • ENQ(要求接收后发出响应来验证存在);

  • Unicode标准增加了许多新的非打印字符,比如Zero-Width Non-Joiner [1]  

五、正则表达式 —— 量词(限定符)

限定符用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。有 * 或 + 或 ? 或 {n} 或 {n,} 或 {n,m} 共6种。

正则表达式的限定符有:

量词
字符 描述 实际应用
* 匹配前面的子表达式零次或多次,(没有也给你返回一次) 正则表达式图文超详细总结不用死记硬背(上篇)_第16张图片
+ 匹配前面的子表达式一次或多次 正则表达式图文超详细总结不用死记硬背(上篇)_第17张图片
匹配前面的子表达式零次或一次 正则表达式图文超详细总结不用死记硬背(上篇)_第18张图片
{n} n 是一个非负整数。匹配确定的 n 次 正则表达式图文超详细总结不用死记硬背(上篇)_第19张图片
{n,} n 是一个非负整数。至少匹配n 次 正则表达式图文超详细总结不用死记硬背(上篇)_第20张图片
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。 正则表达式图文超详细总结不用死记硬背(上篇)_第21张图片

六、正则表达式 —— 定位符

正则表达式 - 语法之定位符 定位符能够将正则表达式固定到行首或行尾。它们还能够创建这样的正则表达式,这些正则表达式出现在一个单词内、在一个单词的开头或者一个单词的结尾。 定位符用来描述字符串或单词的边界,^和$分别指字符串的开始与结束,\b描述单词的前或后边界,\B表示非单词边界。 正则表达式的限定符有: 字符 描述 ^ 匹配输入字符串的开始位置,如果设置Multiline 属性,^ 也匹配 '

^ 匹配字符串的开始,当该符号在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合

正则表达式图文超详细总结不用死记硬背(上篇)_第22张图片

$ 匹配字符串的结尾、如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 \$。 正则表达式图文超详细总结不用死记硬背(上篇)_第23张图片
\b 匹配一个单词的结尾 正则表达式图文超详细总结不用死记硬背(上篇)_第24张图片
\B 匹配不是单词的结尾

七、正则表达式 —— 贪婪匹配与惰性匹配

在满足匹配时,匹配尽可能长的字符串,默认情况下,采用贪婪匹配

量词
字符 描述 实际应用
<.*>   默认为贪婪匹配模式,会匹配尽量长的字符串  正则表达式图文超详细总结不用死记硬背(上篇)_第25张图片
<.*?> 加上?为将贪婪匹配模式转为非贪婪匹配模式,会匹配尽量短的字符串  正则表达式图文超详细总结不用死记硬背(上篇)_第26张图片

1、几个常用的非贪婪匹配模板

  • *? 重复任意次,但尽可能少重复
  • +? 重复1次或更多次,但尽可能少重复
  • ?? 重复0次或1次,但尽可能少重复
  • {n,m}? 重复n到m次,但尽可能少重复
  • {n,}? 重复n次以上,但尽可能少重复
. 是任意字符
* 是取 0 至 无限长度
? 是非贪婪模式。
何在一起就是 取尽量少的任意字符,一般不会这么单独写,他大多用在:
.*?x

就是取前面任意长度的字符,直到一个x出现

八、正则表达式 —— 转义符

在正则表达式中,有很多有特殊意义的是元字符,比如\n和\s等,如果要在正则中匹配正常的"\n"而不是"换行符"就需要对"\"进行转义,变成'\\'。

在python中,无论是正则表达式,还是待匹配的内容,都是以字符串的形式出现的,在字符串中\也有特殊的含义,本身还需要转义。所以如果匹配一次"\n",字符串中要写成'\\n',那么正则里就要写成"\\\\n",这样就太麻烦了。这个时候我们就用到了r'\n'这个概念,此时的正则是r'\\n'就可以了

1、例一

比如我要匹配内容中的\n字符串而不是换行符

正则表达式图文超详细总结不用死记硬背(上篇)_第27张图片

2、例二

比如我要匹配内容中的 \\n字符串而不是换行符

正则表达式图文超详细总结不用死记硬背(上篇)_第28张图片

结语:

最后感谢各位能够看到这里:

在鲁迅一篇未发表的文章中说过:“代码看懂了不是懂✨一定要自己实际操作哇✨这样才能更好的理解和吸收。”
最后来一句:一个人可以在任何他怀有无限热忱的事情上成功,让我们一起进步吧✨✨

正则表达式图文超详细总结不用死记硬背(上篇)_第29张图片

你可能感兴趣的:(正则表达式)