萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 正則表達式完整參考:語法、元字元與實戰範例

正則表達式是資料庫模糊查詢、資料清洗與驗證的利器。MySQL 採用 Henry Spencer 實作的 POSIX 1003.2 標準正則引擎,支援豐富的元字元與分組結構。本文系統整理 MySQL 正則的核心語法、保留字元對照表與實戰範例,助你快速掌握複雜模式匹配技巧。

基礎概念

  • 字面匹配:hello 僅匹配 "hello"
  • 替選結構:hello|world 匹配 "hello" 或 "world"
  • 量詞與字元類別:B[an]*s 匹配 "Bs"、"Bananas"、"Baaaaas" 等

核心元字元對照表

元字元說明範例結果
^字串開頭'fofo' REGEXP '^fo'1 (匹配)
$字串結尾'fono' REGEXP '^fono$'1 (匹配)
.任意單一字元(含換行)'fofo' REGEXP '^f.*'1
*前一字元 0 次或多次'Bn' REGEXP '^Ba*n'1
+前一字元 1 次或多次'Bn' REGEXP '^Ba+n'0
?前一字元 0 次或 1 次'Baan' REGEXP '^Ba?n'0
|替選(或)'pi' REGEXP 'pi|apa'1
()分組與捕獲'pipi' REGEXP '^(pi)*$'1
{n}精確 n 次'aaa' REGEXP '^a{3}$'1
{n,}至少 n 次'aaaa' REGEXP '^a{2,}$'1
{n,m}n 到 m 次'aa' REGEXP '^a{1,3}$'1

字元類別與 POSIX 類別

自訂字元集合

  • [a-dX]:匹配 a、b、c、d、X 任一字元
  • [^a-dX]:排除上述字元以外的任一字元
'aXbc' REGEXP '[a-dXYZ]'      -- 1 (含 a、X、b、c)
'aXbc' REGEXP '^[a-dXYZ]+$'    -- 1 (全字串皆屬集合)
'gheis' REGEXP '^[^a-dXYZ]+$'  -- 1 (無排除字元)

POSIX 標準字元類別

類別名稱涵蓋字元
[:alnum:]英數字元
[:digit:]數字 0-9
[:alpha:]字母
[:lower:]小寫字母
[:upper:]大寫字母
[:space:]空白字元(含空格、Tab、換行)
[:punct:]標點符號
[:xdigit:]十六進位數字
'justalnums' REGEXP '[[:alnum:]]+'  -- 1
'!!' REGEXP '[[:alnum:]]+'           -- 0

進階結構

定序元素與等價類

  • [[.ch.]]:定序元素(如德語 ch 視為單一字元)
  • [[=o=]]:等價類(如 o 與 ô、ö 視為同類)

單字邊界

  • [[:<:]]:單字開頭
  • [[:>:]]:單字結尾
'a word a' REGEXP '[[:<:]]'  -- 1
'a xword a' REGEXP '[[:<:]]' -- 0 (xword 不被視為單字開頭)

實戰技巧與效能提醒

  1. 善用錨點:^pattern$ 可大幅縮小掃描範圍,避免全表掃描。
  2. 避免過度巢狀量詞:(a+)+ 類模式極易導致災難性回溯。
  3. 索引無法直接加速 REGEXP:大表模糊查詢建議改用全文索引或應用層預處理。
  4. 字元集影響匹配:多位元組字元集下 . 與 [...] 行為可能與預期不同,測試時請指定 COLLATE。

快速測試範本

SELECT '測試字串' REGEXP '你的正則';  -- 回傳 1 或 0

將上述查詢存為片段,隨時驗證正則邏輯,開發效率倍增。

copyright © 萬盛學電腦網 all rights reserved