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

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

文章目录

🗣️前言

👥一、认识正则表达式

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

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

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

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

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

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

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

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

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

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

👤1、例一

👤2、例二


🗣️前言

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

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

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

👥一、认识正则表达式

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

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

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

字符 描述 实际应用
字符组
[ ... ] 匹配 [ ... ] 中的所有字符 例如:匹配字符串"helloworld234"所有的l h 2 o 字符e5c55e59d5e54377ab49d49798c6b73f.png
[  ^... ] 匹配除了 [ ... ] 中字符的所有字符 例如:匹配字符串"helloworld234"除了l h 2 o 以外的所有字符5456acdaf45b4e7589443b930190bf05.png
[ A-Z ] [A-Z]表示匹配所有的大写字母 例如:匹配字符串"#HelloWorld234"所有的大写字母ee95f9ddb89d41e3961ec0b71e482d5f.png
[ a-z ] [A-Z]表示匹配所有的小写写字母 例如:匹配字符串"#HelloWorld234"所有的小写字母a19e055e8289467fb790dcaf7e6bb108.png
[ \s\S ] 匹配所有。\s 是匹配所有空白符,包括换行,\S 非空白符,不包括换行。 例如:匹配字符串"#HelloWorld234"所有的字符615ab69f00724410bc779f7c071edb85.png

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

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

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

字符 描述 实际应用
非打印字符
\v 匹配一个垂直制表符。等价于 \x0b 和 \cK。
\t 匹配一个制表符。等价于 \x09 和 \cI b7ef01e6be2441918dd30c24939a982f.png
\S 匹配任何非空白字符。等价于 1 f65fdb1b0a374aaa8670b04ae0dce91b.png
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于 [ \f\n\r\t\v] ee6641f83b704414a0ca747efeb06ff3.png
\r 匹配一个回车符。等价于 \x0d 和 \cM
\n 匹配一个换行符。等价于 \x0a 和 \cJ 187e153ef3a04bbba88fe8e9fdd00991.png
\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)** "的模式 9a098e7367d14e5fb6f1134d98dc789f.png
a b `

匹配字符a或字符b
` | | 1d84ad81078a4d9ca144c31af7ad63a4.png |
| \d | 匹配一个数字字符。等价于 [0-9] | 672464101cac4381876c412674b5d47a.png |
| \D | 匹配一个非数字字符。等价于 2 | |
| \w | 匹配字母、数字、下划线。等价于'[A-Za-z0-9_]'。 | 12bd22bb3a0a439bb471bf12d7846e50.png |
| \W | 匹配非字母、数字、下划线。等价于 '3'。 | |
| () | 匹配括号内的表达式,也表示一个组 | d22ccb2c3476479689161c4dc554ca8f.png |
| [] | 匹配字符组中的字符 | 9c492f4af644400aac0ba26e898d4c9e.png |
| \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种。

正则表达式的限定符有:

量词
字符 描述 实际应用
* 匹配前面的子表达式零次或多次,(没有也给你返回一次) a5ff1a806cec407691b8ea60cba45c0e.png
+ 匹配前面的子表达式一次或多次 8c9d0394baf848d38f57b1af0e9ff93a.png
匹配前面的子表达式零次或一次 b8a8d0a46dbe464699f47a7ec99a7bd6.png
{n} n 是一个非负整数。匹配确定的 n 次 ff5db478d8074f3491920f215e951751.png
{n,} n 是一个非负整数。至少匹配n 次 781b8fe45eb745abb0091aafbd6f935b.png
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹配 m 次。 6d249fe9b1fd43119ba12ebb0cef044a.png

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

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

^ 匹配字符串的开始,当该符号在方括号表达式中使用时,表示不接受该方括号表达式中的字符集合 b3c40d7cb96a48a4946fd82c4a060c82.png
$ 匹配字符串的结尾、如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 '\n' 或 '\r'。要匹配 $ 字符本身,请使用 &dollar;。 42dfe689075148ab866cfb07528fe4ba.png
\b 匹配一个单词的结尾 73af80c1485b4a51abc733b1bf829fe6.png
\B 匹配不是单词的结尾

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

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

量词
字符 描述 实际应用
<.*>   默认为贪婪匹配模式,会匹配尽量长的字符串 
<.*?> 加上?为将贪婪匹配模式转为非贪婪匹配模式,会匹配尽量短的字符串 

👤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字符串而不是换行符

​编辑

👤2、例二

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


  1. \f\n\r\t\v
  2. 0-9
  3. A-Za-z0-9_
相关文章
|
8月前
|
Go
如何利用ChatPDF快速阅读英文论文,帮你写文章
如何利用ChatPDF快速阅读英文论文,帮你写文章
108 0
|
9月前
|
JSON 移动开发 前端开发
程序员如何用“心“表白(结尾附源码)
程序员如何用“心“表白(结尾附源码)
64 0
|
11月前
|
运维 Linux 程序员
网友来稿:何为正则?一正则天下,一文带你看尽精华。
网友来稿:何为正则?一正则天下,一文带你看尽精华。
|
机器学习/深度学习 自然语言处理 PHP
正则表达式知识点整理
正则表达式(Regular Expression)就是用某种模式去匹配一类字符串的一种公式。 正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。 正则表达式是繁琐的,但它是强大的,学会之后的应用会让你除了提高效率外,会给你带来绝对的成就感。只要认真阅读本教程,加上应用的时候进行一定的参考,掌握正则表达式不是问题。
全网最易懂的正则表达式教程(7)- 环视
全网最易懂的正则表达式教程(7)- 环视
109 0
全网最易懂的正则表达式教程(7)- 环视
|
Windows
全网最易懂的正则表达式教程(4)- 范围
全网最易懂的正则表达式教程(4)- 范围
105 0
|
JavaScript 前端开发 索引
【重温基础】9.正则表达式
【重温基础】9.正则表达式
139 0
|
数据可视化
学习正则(第四天)拆分阅读
学习正则(第四天)拆分阅读
86 0
学习正则(第四天)拆分阅读
|
XML 前端开发 程序员
你能想到的正则表达式这里都有了,收藏作为速查手册
哈喽,大家好,我是一条。 正则表示式一直是字符串匹配验证中必须要用的,但是实在是太难记。 别慌,一条给大家准备好了,想用什么,直接取,还不收藏,等啥呢?
125 0
你能想到的正则表达式这里都有了,收藏作为速查手册
|
机器学习/深度学习 移动开发 JavaScript
正则表达式学习记录
正则表达式学习记录
186 0