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

PHP 正則表達式完整指南:從入門到精通

     編輯:PHP 相關知識

PHP 正則表達式完整指南:從入門到精通

正則表達式雖然學習曲線陡峭,但掌握後能極大提升文本處理效率,並帶來極強的成就感。本文系統整理了 PHP 正則表達式的核心知識點,包含語法詳解、運算優先級、常用符號表、實戰範例及匹配規則,助你快速建立完整知識體系。

1. 正則表達式的歷史與定義

正則表達式的起源可追溯至 1956 年,數學家 Stephen Kleene 基於神經網絡研究提出「正則集的代數」概念。後經 Ken Thompson 引入 Unix qed 編輯器,成為文本編輯與搜索工具的核心組件。正則表達式本質上是描述字符串匹配模式的文本模板,由普通字符(字母、數字、標點)與特殊元字符組成,用於檢查、替換或提取符合條件的子串。

2. 核心語法元素詳細解析

2.1 字符分類

  • 普通字符:未被指定為元字符的所有可打印與非打印字符。
  • 非打印字符:如 \n(換行)、\t(制表符)、\s(任意空白字符)、\d(數字)等,均有對應的轉義序列與等價字符類。
  • 特殊字符(元字符):$ () * + . [ ? \ ^ { | 等,若需匹配字面值需用反斜槓轉義。

2.2 限定符與貪婪/非貪婪模式

限定符含義等價寫法
*零次或多次{0,}
+一次或多次{1,}
?零次或一次{0,1}
{n}恰好 n 次—
{n,}至少 n 次—
{n,m}n 到 m 次—

預設為貪婪模式(盡可能多匹配),在限定符後加 ? 可啟用非貪婪模式(如 .*?)。

2.3 定位符與選擇

  • ^ $:字符串開始/結束(多行模式下匹配行首/行尾)。
  • \b \B:單詞邊界 / 非單詞邊界。
  • () 搭配 | 實現多選分支,使用 (?:) 可避免捕獲副作用。

2.4 後向引用與非捕獲組

括號內的子表達式會按順序編號(1-99),可用 \1 \2 等回溯引用。?: ?= ?! 分別為非捕獲組、正向預查、負向預查,預查不消耗字符。

3. 運算符優先級(由高到低)

  1. \ 轉義符
  2. () (?:) (?=) [] 括號
  3. * + ? {n} {n,} {n,m} 限定符
  4. ^ $ \元字符 位置與順序
  5. | 「或」操作

4. 全量符號速查表(節選重點)

符號說明
\d / \D數字 / 非數字
\w / \W單詞字符(字母數字下劃線) / 非單詞字符
\s / \S空白字符 / 非空白字符
.除換行外任意單字符
[xyz] / [^xyz]字符集 / 排除字符集
[a-z] / [^a-z]字符範圍 / 排除範圍
(?=pattern)正向預查(不消耗字符)
(?!pattern)負向預查(不消耗字符)
\n後向引用第 n 個捕獲組
\xnn / \unnnn十六進制 / Unicode 轉義

5. 實戰範例精選

正則用途
/\b([a-z]+) \1\b/gi檢測連續重複單詞
/(\w+):\/\/([^/:]+)(:\d*)?([^# ]*)/解析 URL 協議、域、端口、路徑
/^(?:Chapter|Section) [1-9][0-9]{0,1}$/匹配章節標題
/Windows(?=95|98|NT)/僅匹配後跟特定版本的 Windows

6. 匹配規則深度解析

6.1 基本模式匹配

^once 僅匹配以 once 開頭的字符串;bucket$ 匹配以 bucket 結尾;^bucket$ 則精確匹配整個字符串。轉義序列如 \t \n \\ \. 用於匹配特殊字符字面值。

6.2 字符類與內置類

方括號定義字符類:[AaEeIiOoUu] 匹配任一元音;[a-z] 匹配小寫字母;[^0-9] 排除數字。PHP 內置 POSIX 字符類:[[:alpha:]] [[:digit:]] [[:alnum:]] [[:space:]] 等,提升可讀性。

6.3 重複次數控制

花括號 {n} {n,} {n,m} 分別表示確定、至少、範圍次數。簡寫對應:?={0,1}、*={0,}、+={1,}。實例:^[a-zA-Z0-9_]+$ 匹配含字母數字下劃線的非空串;^-?\d*\.?\d*$ 匹配十進制數字。

7. PHP 正則實戰提示

  • 分隔符可用單引號、/、#,靈活選擇避免過度轉義。
  • 修飾符 i(忽略大小寫)、s(單行模式,讓 . 匹配換行)常用組合。
  • 模式中 \s 代表空白字符,非字面 s。

掌握正則表達式關鍵在於大量練習與查閱手冊,建議收藏本文作為開發時的速查手冊。

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