正则的基本知识

82 阅读3分钟

正则,就是正则表达式,英文名 Regular Expression,简称 RE。正则是一种描述文本组成规律的表示方式。

正则元字符

正则元字符大致可以分为以下几类:

特殊单字符

单字符含义
\d任意数字
\D任意非数字
\w任意字母数字下划线
\W任意非字母数字下划线
\s任意空白符
\S任意非空白符

空白符

空白符含义
\r回车符
\n换行符
\f换页符
\t制表符
\v垂直制表符
\s任意空白符

范围

标题
|或,如 ac|bc 表示 ac 或者 bc
[...]多选一,括号中任意单个元素
[a-z]匹配 a 到 z 之间任意单个元素(ASCII 码)
[^...]取反,不能是括号中任意单个元素

量词

量词含义
*0 到多次
+1 到多次
?0 到 1 次
{m}出现 m 次
{m,}至少出现 m 次
{m,n}出现 m 到 n 次

正则中量词默认是贪婪匹配,如果想要进行非贪婪匹配需要在量词后面加上问号。贪婪和非贪婪匹配都可能会进行回溯,独占模式也是进行贪婪匹配,但不进行回溯。因此在一些场景下,可以提高匹配的效率。

贪婪匹配

  1. 表示次数的量词,默认是贪婪的。满足要求情况下,尽可能按最长去匹配。
  2. 回溯:后面匹配不上,会吐出已匹配的再尝试。

非贪婪匹配

  1. “量词”元字符后面加 ? 满足要求情况下,尽可能按最短去进行匹配。
  2. 回溯:后面匹配不上,会匹配更长再接着尝试。

独占模式

  1. “量词”元字符后面加 + 满足要求情况下,尽可能按最长去匹配。
  2. 不会发生回溯,匹配不上即认为失败

分组

括号在正则中可以用于分组,被括号括起来的一部分会被保存为一个子组,可以在后续查找或替换中引用分组。

image.png

这里有两个分组,日期是第一个,时间是第二个。

  1. 第几个括号就是第几个分组,嵌套括号只看左括号的序号
  2. 非捕获分组,使用 (?:正则)
  3. 分组命名,(?P<名称>正则)
  4. 可以使用分组进行查找和替换

思考:

the little cat cat is in the hat hat hat, we like it it.

替换为

the little cat is in the hat, we like it.

image.png

匹配模式

不区分大小写模式(Case-Insensitive)

可以让整个正则或正则中某一部分进行不区分大小写的匹配。

image.png

当我们把整个模式修饰符放在整个正则前面时,就表示整个正则表达式都是不区分大小写的。模式修饰符是通(? 模式标识)的方式来表示的。

  1. 不区分大小写模式修饰符就是 (?i)
  2. 修饰符如果在括号内,作用范围就是这个括号内的正则,而不是整个正则
  3. 使用编程语言时可以使用预定义好的常量来指定匹配模式

点号通配模式

image.png

  1. 点通号模式的修饰符是 (?s)

多行匹配模式

非多行模式下,^ 匹配整个文本的开头,$ 匹配整个文本的结尾。

image.png image.png

  1. 多行模式的修饰符是 (?m)

注释模式(Comment)

可以在正则中加入注释,让正则变得更加容易阅读和可维护。

image.png

  1. 注释模式的修饰符是 (?#comment)