PHP 的 PCRE 函數族(preg_*)是處理複雜字符串匹配、替換、分割、過濾的標準工具。本文系統整理 7 個核心函數的簽名、行為差異與典型示例。
| 函數 | 用途 | 返回值 |
|---|---|---|
preg_match($pattern, $subject, &$matches) | 匹配一次,找到即停止 | 0/1(匹配次數) |
preg_match_all($pattern, $subject, &$matches) | 全局匹配所有 | 匹配總次數 |
preg_replace($pattern, $replace, $subject, $limit=-1, &$count) | 替換所有匹配 | 替換後的字符串/數組 |
preg_filter($pattern, $replace, $subject) | 僅保留發生替換的元素 | 過濾後的數組 |
preg_grep($pattern, $input) | 返回匹配模式的數組元素 | 匹配的子數組 |
preg_split($pattern, $subject, $limit=-1, $flags=0) | 正則分割字符串 | 分割後的數組 |
preg_quote($str, $delimiter=null) | 轉義正則元字符 | 轉義後的字符串 |
$pattern = '/[0-9]/'; $subject = 'weuyr3ui76as83s0ck9'; $m1 = []; $m2 = []; $t1 = preg_match($pattern, $subject, $m1); // 1,只匹配第一個 '3' $t2 = preg_match_all($pattern, $subject, $m2); // 7,匹配所有數字 // $m1 = ['3']; $m2 = [['3','7','6','8','3','0','9']]
$pattern = ['/[0123]/', '/[456]/', '/[789]/']; $replace = ['啊', '啦', '嗦']; $subject = 'weuyr3ui76as83s0ck9'; $r1 = preg_replace($pattern, $replace, $subject); // 'weuyr啊ui嗦啦as嗦啊s啊ck嗦'(保留未匹配字符) $r2 = preg_filter($pattern, $replace, $subject); // 同 preg_replace,但若 $subject 為數組,僅返回發生替換的鍵值對
$subject = ['weuy', 'r3ui', '76as83', 's', '0ck9'];
$arr = preg_grep('/[0-9]/', $subject);
// ['r3ui', '76as83', '0ck9']
$subject = '你2好3啊!';
$arr = preg_split('/[0-9]/', $subject);
// ['你', '好', '啊!']
~ 或 # 減少 / 轉義。preg_match_all + 循環處理,避免巨大 $matches 佔用記憶體。preg_replace_callback 替換邏輯複雜時替代 /e 修飾符(已移除)。filter_var() 內建過濾器,正則作為補充。熟練掌握這 7 個函數,能解決 95% 以上字符串處理需求。