目錄
一、什么是正則表達式?
二、基礎語法速查表
三、進階特性
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位
- 包含大小寫字母
- 包含數字和特殊字符