正则表达式完全指南
约 1016 字大约 3 分钟
2020-09-06
正则表达式是处理文本的强大工具,本文将系统介绍其语法规则和实际应用。
用途
- 文本查找
- 文本替换
组成
- 正则表达式分为:普通字符 + 元字符
- 元字符按打印方式分为:非打印字符 + 特殊字符
- 元字符按作用类型分为:限定符 + 定位符
普通字符
- 没有标记为元字符的所有可打印字符(字母、数字、标点...)
非打印字符
| 字符 | 说明 |
|---|---|
\cx | 匹配 x 指明的控制字符 |
\f | 匹配换页符 |
\n | 匹配换行符 |
\r | 匹配回车符 |
\s | 匹配任何空白字符 |
\S | 匹配任何非空白字符 |
\t | 匹配制表符 |
\v | 匹配垂直制表符 |
特殊字符
| 字符 | 说明 |
|---|---|
$ | 匹配字符串的结尾 |
^ | 匹配字符串开始位置 |
() | 匹配一个子表达式的开始和结束 |
[ | 标记中括号表达式开始 |
{ | 标记限定符表达式开始 |
* | 匹配前面的子表达式 0 次或多次 |
+ | 匹配前面的子表达式 1 次或多次 |
. | 匹配换行符之外的任何字符 |
? | 匹配前面表达式 0 次或 1 次 |
| | 指明两项之间选择 |
\ | 将后一个字符标记为特殊字符、原义字符、向后引用、八进制转义 |
限定符
| 字符 | 说明 |
|---|---|
* | 匹配前面子表达式 0 次或多次 |
+ | 匹配前面子表达式 1 次或多次 |
? | 匹配前面子表达式 0 次或 1 次 |
{n} | 匹配确定的 n 次 |
{n,} | 匹配至少 n 次 |
{n,m} | 至少匹配 n 次,最多匹配 m 次 |
定位符
| 字符 | 说明 |
|---|---|
^ | 匹配字符串开始位置 |
$ | 匹配字符串结尾位置 |
\b | 匹配字边界 |
\B | 匹配非字边界 |
\s | 匹配空白字符 |
\uxxxx | 匹配十六进制数 xxxx 规定的 Unicode 字符 |
i | 大小写不敏感 |
[abc] [0-9] | 匹配 [] 内字符 |
(a|b) | 匹配 a 或者 b |
语法结构
基本语法格式:
^定位符限定符$实践示例
以下是一些常用的正则表达式示例:
匹配邮箱
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$匹配手机号(中国大陆)
^1[3-9]\d{9}$匹配 URL
^https?:\/\/[\w.-]+(\.[\w.-]+)+[\w\-._~:/?#[\]@!$&'()*+,;=]*$常见坑点
贪婪匹配 vs 非贪婪匹配:默认是贪婪匹配,会匹配尽可能多的字符。使用
?可以转为非贪婪匹配。# 贪婪匹配(匹配整个字符串) <.*> # 匹配 "<div>content</div>" 整体 # 非贪婪匹配(匹配最小范围) <.*?> # 分别匹配 "<div>" 和 "</div>"转义问题:特殊字符需要转义才能匹配字面值。
# 匹配字面的点号 \. # 正确 . # 错误:会匹配任意字符边界问题:
\b匹配的是单词边界,不是空格。# 匹配独立单词 "test" \btest\b # 能匹配 "a test b" 中的 test # 不能匹配 "testing" 中的 test
总结
- 正则表达式由普通字符和元字符组成
- 元字符分为非打印字符、特殊字符、限定符和定位符
- 掌握常用语法后,可以灵活组合处理复杂文本
- 注意贪婪匹配和转义问题
参考资源
[格式修正摘要]
- 标题:添加 H1 标题"正则表达式完全指南",优化 permalink
- 格式:列表符号
*改为-,代码块添加语言标识regex - 内容:非打印字符、特殊字符、限定符、定位符改为表格展示
- 间距:标题与正文间添加空行
- 排版:中英文/数字之间添加空格(如
n 次、\uxxxx) - 结构:添加背景摘要、实践示例、常见坑点、总结、参考资源
- 修复:标点符号统一(
?改为?、|转义问题修复)
