正则表达式是一种强大的文本匹配工具,通过特定的语法规则,可以实现对字符串的灵活匹配。在本文中,我们将介绍一系列常用的正则表达式,覆盖了匹配任意字符、多个字符包含匹配、排除字符包含匹配、重复匹配、单词边界匹配、字符串边界、子表达式(分组)、回溯引用以及前后查找等内容
匹配任意字符
使用.
通配符可以匹配任意的字符(单个字符)
例如,a.b
可以匹配到”acb”、”aab”、”a1b”等字符串。
多个字符包含匹配
通过使用[]
将允许匹配的字符穷举在括号中,如[abc123]
可以匹配a、b、c、1、2、3中的任意一个字符
一些常用的范围可以直接使用范围匹配,如[a-zA-Z1-9]
等
排除字符包含匹配
在上述括号中开头添加^
即可匹配除括号中字符的其他字符,如[^abc123]
可以匹配除a、b、c、1、2、3中的其他任意一个字符
重复匹配
- 匹配最少n个:
{n,}
- 匹配精确的n个:
{n}
- 匹配最少n个,最多m个:
{n, m}
- 匹配最少一个:
+
- 匹配0个或1个:
?
- 匹配0个或多个:
*
这些重复匹配的模式能够灵活地处理不同数量的字符,满足各种匹配需求。例如,\d{2,4}
可以匹配2到4个数字
对于*
、+
、{n,}
这种没有匹配数量上限的,如果想让它尽可能少匹配的时候,可以在后面添加一个?
符号
单词边界匹配
\b
可以用于匹配单词(由大小写字母及下划线组成)和非单词的边界。这在需要确保匹配的是整个单词而不是单词的一部分时非常有用。例如,\bword\b
可以匹配到 “word”,而不会匹配到 “subword” 中的 “word”。
字符串边界
使用^
可以匹配字符串的开头,$
可以匹配字符串的结尾。这样的匹配规则确保了正则表达式模式不会匹配到中间的某个部分
子表达式(分组)
可以通过括号将表达式分组,整体进行次数、选择等匹配
例如,(\d{3}\.){3}
可以整体将三个数字+点整体匹配三次;(a1|a2)
可以匹配a1
或者a2
回溯引用
回溯引用允许我们使用之前匹配到的分组。例如,[ ]+(\w+)[ ]+\1
,其中[ ]+(\w+)[ ]
是匹配一个空格+多个字符+一个空格,后面的\1
会使用之前的第一个分组(\w+)
中匹配到的内容,如匹配 this is a name name
中的两个 name
前后查找
有时候我们只想匹配某些字符,但并不希望它们作为返回结果。这时候可以使用前后查找
- 向前查找:以
?=
开头的表达式,如https{0,1}(?=:)
可以匹配到url中的协议,不包含冒号。这样可以确保匹配的是协议部分,而不包括冒号在内。 - 向后查找:以
?<=
开头的表达式,如(?<=\$)[0-9\.]+
可以匹配到$123.45
中的金额部分,而不包含$
符号本身
常用表达式
表达式 | 匹配内容 |
---|---|
\s | 空白字符 |
\S | 非空白字符 |
\d | 数字 |
\D | 非数字 |
\w | 一个单词字符a-z、A-Z以及下划线_ |
\W | 非单词字符 |
\b | 单词边界 |
\B | 非单词边界 |
\n | 换行符 |
\r | 回车符 |
\t | Tab |
^ | 字符串开头 |
$ | 字符串结尾 |