正则表达式完全指南:从入门到实战
目录
一、什么是正则表达式?
二、基础语法速查表
三、进阶特性
1.分组与捕获
2.非捕获分组
3.前瞻与后顾
4.贪婪与懒惰匹配
四、实战案例
案例1:验证手机号
案例2:提取网页中所有链接
案例3:密码强度验证
一、什么是正则表达式?
正则表达式(Regular Expression)是一种描述字符串匹配模式的工具,通过特殊字符组合实现复杂文本的查找、替换和验证功能。
核心作用:
-
文本搜索(查找特定模式)
-
数据验证(如邮箱格式检查)
-
文本替换(格式化数据)
-
数据提取(爬虫中的信息抽取)
二、基础语法速查表
元字符 | 描述 | 示例 |
---|---|---|
. | 匹配任意字符(除换行符) | a.c 匹配 "abc", "a1c" |
^ | 匹配字符串开始 | ^Hello 匹配 "Hello World" 开头 |
$ | 匹配字符串结束 | world$ 匹配 "Hello world" |
* | 匹配前一个字符0次或多次 | ab* 匹配 "a", "abbb" |
+ | 匹配前一个字符1次或多次 | ab+ 匹配 "ab", "abbb" |
? | 匹配前一个字符0或1次 | colou?r 匹配 "color" 或 "colour" |
{n} | 精确匹配n次 | a{3} 匹配 "aaa" |
{n,} | 至少匹配n次 | a{2,} 匹配 "aa", "aaaa" |
{n,m} | 匹配n到m次 | a{2,4} 匹配 "aa", "aaa" |
[] | 字符集合 | [abc] 匹配 "a", "b", 或 "c" |
[^] | 反向字符集合 | [^abc] 匹配除a/b/c外任意字符 |
\d | 匹配数字(0-9) | \d{3} 匹配 "123" |
\w | 匹配字母/数字/下划线 | \w+ 匹配 "hello_123" |
\s | 匹配空白字符 | a\sb 匹配 "a b" |
三、进阶特性
1.分组与捕获
# 匹配日期格式(YYYY-MM-DD)
(\d{4})-(\d{2})-(\d{2})
# 分组结果:
# Group 1: 年份
# Group 2: 月份
# Group 3: 日期
2.非捕获分组
# 仅分组不捕获
(?:https?)://[^\s]+
3.前瞻与后顾
# 正向前瞻:匹配后面跟着"元"的数字
\d+(?=元)# 负向前瞻:匹配后面不跟着"元"的数字
\d+(?!元)# 正向后顾:匹配前面是"价格:"的数字
(?<=价格:)\d+# 负向后顾:匹配前面不是"价格:"的数字
(?<!价格:)\d+
4.贪婪与懒惰匹配
# 贪婪匹配(默认)
<.*> # 匹配 <div>content</div> 整个字符串# 懒惰匹配(加?)
<.*?> # 只匹配 <div> 和 </div>
四、实战案例
案例1:验证手机号
^1[3-9]\d{9}$
- ^1 以1开头
- [3-9] 第二位为3-9
- \d{9} 后面跟9为数字
案例2:提取网页中所有链接
<a\s+(?:[^>]*?\s+)?href=(["'])(.*?)\1
捕获组2即为链接地址
案例3:密码强度验证
^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$
要求:
- 至少8位
- 包含大小写字母
- 包含数字和特殊字符