正则,就是正则表达式,英文名 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 次 |
正则中量词默认是贪婪匹配,如果想要进行非贪婪匹配需要在量词后面加上问号。贪婪和非贪婪匹配都可能会进行回溯,独占模式也是进行贪婪匹配,但不进行回溯。因此在一些场景下,可以提高匹配的效率。
贪婪匹配
- 表示次数的量词,默认是贪婪的。满足要求情况下,尽可能按最长去匹配。
- 回溯:后面匹配不上,会吐出已匹配的再尝试。
非贪婪匹配
- “量词”元字符后面加
?。 满足要求情况下,尽可能按最短去进行匹配。 - 回溯:后面匹配不上,会匹配更长再接着尝试。
独占模式
- “量词”元字符后面加
+。 满足要求情况下,尽可能按最长去匹配。 - 不会发生回溯,匹配不上即认为失败
分组
括号在正则中可以用于分组,被括号括起来的一部分会被保存为一个子组,可以在后续查找或替换中引用分组。
这里有两个分组,日期是第一个,时间是第二个。
- 第几个括号就是第几个分组,嵌套括号只看左括号的序号
- 非捕获分组,使用 (?:正则)
- 分组命名,(?P<名称>正则)
- 可以使用分组进行查找和替换
思考:
the little cat cat is in the hat hat hat, we like it it.
替换为
the little cat is in the hat, we like it.
匹配模式
不区分大小写模式(Case-Insensitive)
可以让整个正则或正则中某一部分进行不区分大小写的匹配。
当我们把整个模式修饰符放在整个正则前面时,就表示整个正则表达式都是不区分大小写的。模式修饰符是通(? 模式标识)的方式来表示的。
- 不区分大小写模式修饰符就是
(?i) - 修饰符如果在括号内,作用范围就是这个括号内的正则,而不是整个正则
- 使用编程语言时可以使用预定义好的常量来指定匹配模式
点号通配模式
- 点通号模式的修饰符是
(?s)
多行匹配模式
非多行模式下,^ 匹配整个文本的开头,$ 匹配整个文本的结尾。
- 多行模式的修饰符是
(?m)
注释模式(Comment)
可以在正则中加入注释,让正则变得更加容易阅读和可维护。
- 注释模式的修饰符是
(?#comment)