
- 验证文本格式(如邮箱、手机号、URL)
- 搜索和提取文本中的特定模式
- 替换文本中的内容
- 分割字符串
元字符是正则表达式中具有特殊含义的字符,用于定义模式的规则。
元字符 |
含义 |
示例 |
. |
匹配任意单个字符(除了换行符n ,某些引擎支持匹配换行符) |
a.c 匹配 abc 、a0c 、a#c 等 |
^ |
匹配字符串的开头 |
^hello 匹配以 hello 开头的字符串 |
$ |
匹配字符串的结尾 |
world$ 匹配以 world 结尾的字符串 |
* |
匹配前一个字符0 次或多次(贪婪匹配) |
a* 匹配空字符串、a 、aa 、aaa 等 |
+ |
匹配前一个字符1 次或多次(贪婪匹配) |
a+ 匹配 a 、aa 、aaa 等,不匹配空字符串 |
? |
匹配前一个字符0 次或 1 次(可选) |
colou?r 匹配 color 或 colour |
[] |
匹配括号内的任意一个字符 |
[abc] 匹配 a 、b 、c 中的任意一个 |
[^] |
匹配不在括号内的任意一个字符(取反) |
[^abc] 匹配除 a 、b 、c 外的任意字符 |
{n} |
匹配前一个字符恰好 n 次 |
a{2} 匹配 aa |
{n,} |
匹配前一个字符至少 n 次 |
a{2,} 匹配 aa 、aaa 等 |
{n,m} |
匹配前一个字符至少 n 次,最多 m 次 |
a{2,5} 匹配 aa 、aaa 、aaaa 、aaaaa |
| |
匹配左右任意一个表达式(逻辑或) |
a|b 匹配 a 或 b |
|
转义字符,用于取消元字符的特殊含义(如匹配 $ 、[ 等) |
$ 匹配字符 $ ,[ 匹配字符 [ |
为常见字符集合提供简写形式。
字符类 |
含义 |
等价写法 |
d |
匹配任意一个数字(0-9) |
[0-9] |
D |
匹配任意一个非数字字符 |
[^0-9] |
w |
匹配任意一个单词字符(字母、数字、下划线) |
[A-Za-z0-9_] |
W |
匹配任意一个非单词字符 |
[^A-Za-z0-9_] |
s |
匹配任意一个空白字符(空格、制表符、换行符等) |
[tnrfv] |
S |
匹配任意一个非空白字符 |
[^tnrfv] |
-
分组(()
)
用于将多个字符组合成一个整体,方便后续操作(如量词、反向引用)。
示例:
(ab)+
匹配 ab
、abab
、ababab
等(将 ab
作为一个整体重复)。
(d{3})-(d{4})
匹配 123-4567
这样的格式,分组可用于提取部分匹配结果。
-
反向引用(n
)
引用之前分组匹配到的内容,1
表示引用第一个分组,2
表示第二个分组,以此类推。
示例:
(w+)s1
匹配重复的单词,如 hello hello
(第一个分组 (w+)
匹配 hello
,1
引用该内容)。
(<tag>).+?</1>
匹配 HTML 标签,如 <div>content</div>
(1
引用 <div>
)。
用于匹配某个位置的前后条件,不消耗字符(零宽度)。
断言类型 |
含义 |
示例 |
正向前瞻 (?=) |
匹配当前位置后面满足条件的内容 |
abc(?=def) 匹配 abc 后面紧跟 def 的位置(如 abcdef 中的 abc ) |
负向前瞻 (?!) |
匹配当前位置后面不满足条件的内容 |
abc(?!def) 匹配 abc 后面不跟 def 的位置(如 abcxyz 中的 abc ) |
正向后瞻 (?<=) |
匹配当前位置前面满足条件的内容 |
(?<=abc)def 匹配 def 前面是 abc 的位置(如 abcdef 中的 def ) |
负向后瞻 (?<!) |
匹配当前位置前面不满足条件的内容 |
(?<!abc)def 匹配 def 前面不是 abc 的位置(如 xdef 中的 def ) |
-
贪婪匹配:默认行为,尽可能多地匹配字符(使用 *
、+
、?
、{n,m}
时)。
示例:a.*b
匹配 aXbYb
时,会匹配整个 aXbYb
(贪婪地匹配到最后一个 b
)。
-
非贪婪匹配:在量词后加 ?
,尽可能少地匹配字符。
示例:a.*?b
匹配 aXbYb
时,会匹配 aXb
(遇到第一个 b
就停止)。
-
证邮箱格式
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+.[a-zA-Z]{2,}$
^[a-zA-Z0-9._%+-]+
:用户名(字母、数字、特殊符号)。
@[a-zA-Z0-9.-]+
:域名主体(如 example
)。
.[a-zA-Z]{2,}$
:域名后缀(如 .com
、.cn
)。
-
提取电话号码(中国大陆手机号)
1
:开头为 1。
[3-9]
:第二位为 3-9 之间的数字。
d{9}
:后面 9 位数字。
-
分组 (w+)
匹配标签名(如 div
、p
),反向引用 1
匹配闭合标签。
- 不同引擎的差异:正则表达式语法在不同语言 / 工具中可能略有不同(如换行符处理、断言支持等)。
- 性能优化:避免过度使用贪婪匹配和复杂分组,可能导致匹配效率低下。
- 调试优先:复杂模式建议先用在线工具测试,再集成到代码中。