首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 正則表達式完整指南:保留字元、量詞、字元類與實戰範例

     編輯:MySQL 資料庫相關知識

MySQL REGEXP 操作符支援 POSIX 1003.2 標準正則表達式,可在 SQL 中直接進行複雜模式匹配。本文系統整理保留字元、量詞、字元類、邊界斷言與實戰範例。

核心保留字元與語法

語法說明範例 (匹配→1,不匹配→0)
^字串開頭'fofo' REGEXP '^fo' → 1
$字串結尾'fono' REGEXP '^fono$' → 1
.任意單字元(含換行)'fofo' REGEXP '^f.*' → 1
a*0 或多個 'a''Bn' REGEXP '^Ba*n' → 1
a+1 或多個 'a''Bn' REGEXP '^Ba+n' → 0
a?0 或 1 個 'a''Bn' REGEXP '^Ba?n' → 1
de|abc或邏輯'pi' REGEXP 'pi|apa' → 1
(abc)*分組量詞'pipi' REGEXP '^(pi)*$' → 1
{n}恰好 n 次'aaa' REGEXP '^a{3}$' → 1
{n,}至少 n 次'aaa' REGEXP '^a{2,}$' → 1
{n,m}n 到 m 次'aa' REGEXP '^a{1,3}$' → 1
[a-dX]字元集合'aXbc' REGEXP '[a-dX]' → 1
[^a-dX]排除字元集合'gheis' REGEXP '^[^a-dX]+$' → 1
[[:alnum:]]POSIX 字元類(字母數字)'justalnums' REGEXP '[[:alnum:]]+' → 1
[[:digit:]]數字
[[:alpha:]]字母
[[:lower:]]小寫
[[:upper:]]大寫
[[:space:]]空白字元
[[:punct:]]標點
[[:xdigit:]]十六進位字元
[[.ch.]]排序元素(如雙字母視為單字元)'chchcc' REGEXP '[[.ch.]]*c' 匹配前 5 字元
[[=o=]]等價類(如 o 與 ó 視為同類)
[[:<:]]單詞左邊界'a word a' REGEXP '[[:<:]]' → 1
[[:>:]]單詞右邊界'a xword a' REGEXP '[[:>:]]' → 0

量詞對照表

  • a* ≡ a{0,}
  • a+ ≡ a{1,}
  • a? ≡ a{0,1}
  • 參數上限 RE_DUP_MAX 預設 255。

實戰範例

-- 查找以數字開頭的用戶名
SELECT * FROM users WHERE username REGEXP '^[[:digit:]]';

-- 查找含連續 3 個以上數字的手機號碼片段
SELECT * FROM logs WHERE message REGEXP '[[:digit:]]{3,}';

-- 查找純英文單詞(邊界斷言)
SELECT * FROM dict WHERE word REGEXP '^[[:alpha:]]+$';

-- 排除含特殊符號的記錄
SELECT * FROM comments WHERE content NOT REGEXP '[[:punct:]]';

效能提醒

  • REGEXP 無法使用索引,全表掃描。
  • 大資料量建議:
    — 將正則邏輯下推至應用層(程式語言正則更快)
    — 或建立功能性索引(MySQL 8.0+ CAST(col AS CHAR) REGEXP ... 不支援索引)
    — 採用全文索引 + 布林模式替代簡單模式
  • 複雜正則易導致 ReDoS(正則拒絕服務),生產環境需審核。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved