PCRE(Perl Compatible Regular Expressions)是 PHP 強大的文本處理利器。本文通過 12 個 Demo 系統講解元字符、修飾符、貪婪/非貪婪、分組捕獲、常用函數(preg_match/all/grep/replace/split/quote)及 UBB 標簽替換實戰。
$pattern = '/php/'; $str = 'fsdfsdfsdphpfsdfs'; if (preg_match($pattern, $str)) echo '匹配'; // 只要包含連續 php 即可
| 符號 | 含義 | 示例 |
|---|---|---|
+ | 前導字符 ≥1 次 | /ph+p/ 匹配 php、phhp |
* | 前導字符 ≥0 次 | /ph*p/ 匹配 pp、php、phhp |
? | 前導字符 0 或 1 次 | /ph?p/ 匹配 pp、php |
. | 任意單字符(除換行) | /p.p/ 匹配 php、p@p |
{n} | 前導字符恰好 n 次 | /ph{3}p/ 匹配 phhhp |
{n,m} | 前導字符 n~m 次 | /ph{3,5}p/ |
^ | 字符串開頭 | /^php/ |
$ | 字符串結尾 | /php$/ |
| | 或條件 | /php|asp/ |
() | 分組捕獲 | /(this) (is) (php|asp)/ |
[a-z]、[0-9]、[asv]:任一字符[^abc]:非 abc 字符\w = [a-zA-Z0-9_]、\W 反義\d = [0-9]、\D 反義\s 空白字符、\S 非空白\b 單詞邊界、\B 非邊界\+ \. \* 等i:忽略大小寫m:多行模式(^$ 匹配行首尾)x:忽略模式空白(可寫註釋)A:強制從開頭匹配(等同 ^)U:非貪婪模式(關鍵!)$lang = ['php','asp','jsp','python','ruby'];
print_r(preg_grep('/^p/', $lang)); // 以 p 開頭
preg_match_all('/php[1-5]/', 'php5 php6 php4', $out);
// $out[0] = ['php5','php4']
echo preg_replace('/php[1-6]/', 'oneStopWeb', 'php5 php6'); // 替換所有
// UBB 標簽轉 HTML(非貪婪 U 修飾符)
$pattern = '/(\[b\])(.*)(\[\/b\])/U';
$replace = '<strong>\2</strong>';
echo preg_replace($pattern, $replace, '[b]php5[/b] [b]php6[/b]');
// 輸出:<strong>php5</strong> <strong>php6</strong>
print_r(preg_split('/[.@]/', 'oneStopWeb@163.com'));
// ['oneStopWeb', '163', 'com']
echo preg_quote('PHP is $150'); // PHP is \$150
$pattern = '/^([\w\.]{2,255})@([\w\-]{1,255})\.([a-z]{2,4})$/';
preg_match($pattern, 'test@163.com'); // 合法