首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 正則表達式快速入門:從語法到實戰

     編輯:PHP 相關知識

1. 正則表達式是什麼?

正則表達式(Regex)是一種用於模式匹配與替換的強大工具。廣泛應用於 Perl、PHP、JavaScript、Java、Python、sed、awk、vi 等語言與工具,已成為跨平台通用技能。

典型應用:表單驗證(Email、手機號)、資料清洗、日誌分析、關鍵字提取、URL 重寫等。

2. 基本語法速查

定界符

PHP 使用 /pattern/ 或 #pattern# 等成對字元包裹模式。

元字元

符號含義
.匹配除換行外任意單一字元
\d數字 [0-9]
\D非數字
\w字母、數字、底線 [a-zA-Z0-9_]
\W非單字字元
\s空白字元(空格、Tab、換行)
\S非空白字元

量詞

符號含義等價
*0 次或多次{0,}
+1 次或多次{1,}
?0 次或 1 次{0,1}
{n}恰好 n 次—
{n,}至少 n 次—
{n,m}n 到 m 次—

定位符

符號含義
^字串開頭(多行模式下為行首)
$字串結尾(多行模式下為行尾)
\b單字邊界
\B非單字邊界

字元類別與分組

  • [abc] — a 或 b 或 c
  • [a-z] — a 到 z 範圍
  • [^abc] — 非 a/b/c(^ 在 [] 內為否定)
  • (abc) — 分組捕獲,可後向參考 \1
  • (?:abc) — 非捕獲分組
  • a|b — 或(a 或 b)

模式修飾符

  • i — 忽略大小寫
  • m — 多行模式(^$ 匹配行首尾)
  • s — 單行模式(. 匹配換行)
  • x — 忽略模式空白、允許註解
  • u — UTF-8 模式

3. PHP 實戰範例

Email 驗證

<?php
$email = 'user@example.com';
$pattern = '/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$/i';
if (preg_match($pattern, $email)) {
    echo "格式正確";
} else {
    echo "格式錯誤";
}
// 進階:檢查 MX 記錄
if (preg_match($pattern, $email)) {
    list(, $domain) = explode('@', $email);
    if (checkdnsrr($domain, 'MX')) echo " 域名可收信";
}
?>

提取檔名

$path = '/var/www/html/images/photo.jpg';
preg_match('/([^\/]+)$/', $path, $matches);
echo $matches[1]; // photo.jpg

多重空白壓縮為單一逗號

$str = "a   b\tc\nd";
echo preg_replace('/\s+/', ',', $str); // a,b,c,d

URL 自動連結化

function makeClickableLinks($text) {
    $text = preg_replace('/\b((?:https?|ftp):\/\/[^\s]+)/i', '<a href="$1">$1</a>', $text);
    $text = preg_replace('/\b(www\.[^\s]+)/i', '<a href="https://$1">$1</a>', $text);
    $text = preg_replace('/([\w\.-]+@[\w\.-]+\.\w+)/', '<a href="mailto:$1">$1</a>', $text);
    return $text;
}

4. 學習建議

  1. 掌握核心語法:量詞、定位符、字元類別、分組、修飾符。
  2. 善用線上測試工具:regex101.com、regexr.com 即時除錯並解釋每個符號。
  3. 從簡單開始:先寫出匹配固定字串,再逐步加入變化部分。
  4. 多閱讀實例:研究常見驗證模式(身分證、手機、郵遞區號、IP、日期等)。
  5. 注意效能:避免災難性回溯(如 (a+)+),適度使用具體字元類別替代 .,長字串考慮 preg_match_all 分批處理。

5. 進階挑戰:解讀這個 Email 正則

/^[-!#$%&'*+\/0-9=?A-Z^_`a-z{|}~]+@[-!#$%&'*+\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&'*+\/0-9=?A-Z^_`a-z{|}~]+$/

若能拆解其結構,表示已具備獨立撰寫複雜正則的能力。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved