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

PHP 正則入門精華:從分隔符、修飾符到捕獲替換的核心概念速成

     編輯:PHP 相關知識

正則表達式被譽為「寫時只讀、神級強大、維護地獄」。本文提煉 PHP 正則的三大核心結構——分隔符、模式、修飾符——配合捕獲、替換、分割實戰,助你在 10 分鐘內建立正確心智模型,跨越入門恐懼。

正則三部曲結構

/hello.+?hello/is
^  ^      ^  ^
|  |      |  └─ 修飾符
|  |      └──── 模式
|  └─────────── 結束分隔符
└────────────── 開始分隔符

1. 分隔符

  • 可用任意非字母數字、非反斜線、非空白字元:/、#、~、@、%、| 等。
  • 模式內出現分隔符需轉義:/http:\/\// → 改用 #https://# 更清晰。
  • 成對出現,單引號字串中無需雙重轉義:'#pattern#'。

2. 模式:字面字元 + 元字符 + 字元類別

  • 字面字元:a-z A-Z 0-9 等直接匹配自身。
  • 元字符:. ^ $ * + ? { } [ ] ( ) | \ 賦予特殊語義。
  • 字元類別:[abc]、[a-z]、[^abc]、[:alpha:]、\d \w \s 等。
  • 分組捕獲:(...) 捕獲,(?:...) 非捕獲,(?<name>...) 命名捕獲(PHP 5.2+)。
  • 或運算:a|b|c 任一匹配,優先級最低,常配合分組:(cat|dog)。

3. 修飾符:改變引擎行為

修飾符效果必加場景
i不區分大小寫關鍵字搜尋、Email 域名
m多行模式:^$ 匹配行首尾多行文本逐行解析
s單行模式:. 匹配換行跨行提取、HTML 內容
x忽略模式空白,支援 #註解複雜正則可讀性
uUTF-8 模式處理中文/多位元組必加
U反轉貪婪全局非貪婪偏好
D$ 僅匹配字串絕對結尾精確驗證結尾
J允許重複命名捕獲組分支共用組名

核心操作三板斧

1. 驗證匹配 — preg_match

// 只要判斷是否匹配
if (preg_match('/^[\w.-]+@[\w.-]+\.\w+$/', $email)) { /* valid */ }

// 需要提取部分
if (preg_match('/^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})$/', $date, $m)) {
    echo "Year: {$m['year']}, Month: {$m['month']}";
}

2. 搜尋替換 — preg_replace

// 簡單替換
$clean = preg_replace('/\s+/', ' ', $dirty);  // 多空白合併為單空格

// 回溯引用重構
$date = preg_replace('/(\d{4})-(\d{2})-(\d{2})/', '$3/$2/$1', $date); // Y-m-d → d/m/Y

// 回調函數動態替換(避免巢狀、邏輯複雜)
$html = preg_replace_callback(
    '/<img\s+src="([^"]+)"/i',
    fn($m) => '',
    $html
);

3. 正則分割 — preg_split


// 分割單詞(保留標點)
$tokens = preg_split('/(\W)/u', $text, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);

// 分割 CSV 行(處理引號內逗號)
$fields = preg_split('/,(?=(?:[^"]*"[^"]*")*[^"]*$)/', $line);

轉義鐵律

  • PHP 字串層:單引號 '\\d' → 正則見 \d;雙引號 "\\d" 同理。避免 '\d'(正則見 d)。
  • 正則引擎層:元字符 . \ + * ? [ ] ^ $ ( ) { } | / # 需轉義匹配字面值。
  • preg_quote($str, '/'):使用者輸入進模式必經,自動轉義所有元字符(含分隔符)。

最小可行正則清單(背熟即用 80% 場景)

/^\d+$/              // 純數字
/^[\w.-]+@[\w.-]+\.\w+$/  // 簡易 Email
/^https?:\/\/\S+$/   // URL
/^[\p{Han}]{2,}$/u   // 純中文 (u修飾符)
/\d{4}-\d{2}-\d{2}/  // 日期 Y-m-d
/\b\w{3,}\b/         // 3字母以上單詞
/<[^>]+>/          // HTML 標籤 (簡易)

避坑三句經

  1. 能用字串函數別用正則:strpos、str_replace、explode 快 10 倍以上。
  2. 中文必加 u 修飾符,否則字元截斷、位移錯誤、邊界失效。
  3. 使用者輸入進模式必經 preg_quote,防注入與 ReDoS。

正則是鋒利手術刀,非萬能鑰匙。掌握三部曲結構、三板斧操作、轉義鐵律、避坑三句經,即可安全驅馭 90% PHP 文字處理場景。

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