系統整理 PHP PCRE 正則核心知識體系:兩大函數族、原子/元字符/修飾符三層語法、運算優先級、六大核心功能(匹配/替換/分割/回調/貪婪控制/邊界斷言),附實戰常用模式庫。
| 函數 | 用途 | 返回值 |
|---|---|---|
preg_match | 單次匹配 | int (0/1/false),匹配內容寫入 $matches |
preg_match_all | 全局匹配 | int 匹配次數,$matches 結構可通過 PREG_PATTERN_ORDER/PREG_SET_ORDER 控制 |
preg_replace | 搜索替換 | 混合:字符串/數組,支持 $callback (e 修飾符已棄用) |
preg_split | 正則分割 | 數組,支持 LIMIT、PREG_SPLIT_NO_EMPTY 等標誌 |
preg_grep | 數組過濾 | 返回匹配模式的鍵值子集 |
preg_quote | 元字符轉義 | 字符串,用於動態構建模式 |
棄用:ereg/eregi/split 等 POSIX 族函數已在 PHP 7 移除,統一用 PCRE。
a-z A-Z 0-9[abc]、[^abc]、[a-z]\d \D \w \W \s \S(abc) 捕獲組,(?:abc) 非捕獲組| 符號 | 含義 |
|---|---|
* | 前一原子 0~n 次 |
+ | 前一原子 1~n 次 |
? | 前一原子 0~1 次 |
{m,n} | 前一原子 m~n 次 |
. | 任意字符 (除換行,s 修飾符可含換行) |
| | 分支選擇 (低優先級) |
^ $ | 字符串開始/結束 (m 修飾符變為行首/行尾) |
\b \B | 單詞邊界/非邊界 |
(?=) (?!) (?<=) (? | 正向/負向 預瞻/回顧 斷言 (零寬斷言) |
/pattern/修飾符
| 修飾符 | 作用 |
|---|---|
i | 忽略大小寫 |
m | 多行模式 (^$ 匹配行首尾) |
s | 單行模式 (. 匹配換行) |
x | 忽略模式空白/註釋 (可寫多行可讀模式) |
u | UTF-8 模式 (正確處理多字節字符) |
U | 非貪婪模式 (反轉 *+? 預設行為) |
A | 強制從字符串開始匹配 |
D | $ 僅匹配絕對結尾 (不匹配末尾換行前) |
() (?:) (?=) (?!) (?<=) (? 分組與斷言* + ? {m,n} 量詞^ $ \b \B 邊界斷言| 分支選擇// 郵箱 (RFC 5322 簡化版)
/^[\w.+-]+@[\w-]+\.[\w.-]+$/u
// 手機號 (中國大陸)
/^1[3-9]\d{9}$/
// URL
/^https?:\/\/[\w.-]+\.[a-z]{2,}(\/\S*)?$/i
// HTML 標籤屬性提取
/<(\w+)\s+([^>]*?)>/is
// 非貪婪提取標簽內容
/(.*?)<\/div>/is
// 密碼強度 (8-20 位,含大小寫數字特殊符)
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[\W_]).{8,20}$/
(.*)* 類嵌套量詞,改用定長或原子組 (?>...)。(?:...) 減少內存分配。.、\w 按字節匹配導致亂碼。preg_replace_callback 替代 /e 修飾符 (PHP 7 移除)。正則是文本處理的瑞士軍刀,掌握 PCRE 全集能力,能用最少代碼解決最複雜的解析提取問題。