基礎元字符
| 符號 | 含義 | 範例 |
^ | 字符串開頭 | ^php 匹配 "php is great" |
$ | 字符串結尾 | great$ 匹配 "php is great" |
. | 任意單字符(除換行) | p.p 匹配 "php", "pap" |
* | 前導字符 0 次或多次 | ab*c 匹配 "ac", "abc", "abbc" |
+ | 前導字符 1 次或多次 | ab+c 匹配 "abc", "abbc" |
? | 前導字符 0 次或 1 次 | ab?c 匹配 "ac", "abc" |
\ | 轉義特殊字符 | \. 匹配字面點號 |
字符簇 []
[aeiou] // 任一元音
[0-9] // 任一數字
[a-zA-Z0-9] // 字母數字
[^0-9] // 非數字(^ 在 [] 內表示取反)
[\d\w\s] // 簡寫:數字、單字字符、空白
分組與選擇
(php|perl|python) // 匹配三種語言名稱
(?:non-capture) // 非捕獲分組,僅用於結構
實用範例
Email 簡易驗證
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
手機號(中國大陸)
^1[3-9]\d{9}$
去除 HTML 標籤
preg_replace('/<[^>]+>/', '', $html);
PHP 專用函數
preg_match():單次匹配,返回 0/1。
preg_match_all():全局匹配,返回所有結果陣列。
preg_replace():搜尋替換,支援回溯引用 $1。
preg_split():正則分割字符串。
效能提示
- 能用
strpos/str_replace 解決的不要用正則。
- 避免過度嵌套量詞(如
(a+)*),導致災難性回溯。
- 大量數據預先編譯:
$re = '/pattern/'; 循環外定義,避免重複編譯。