萬盛學電腦網

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

MySQL 正則表達式(REGEXP)完整語法與實戰範例速查表

MySQL 的 REGEXP 操作符支援 POSIX 正則表達式,功能比 LIKE 強大許多。本文整理所有支援的元字元、字元類別、量詞與實用查詢範例。

核心元字元與語法

符號說明範例
^字串開頭'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符合 de 或 abc'pi' REGEXP 'pi|apa' -- 1
(abc)*0 或多個 abc 序列'pipi' REGEXP '^(pi)*$' -- 1
{n}, {m,n}精確 n 次 / m 到 n 次'abcde' REGEXP 'a[bcd]{3}e' -- 1
[a-dX]字元集合(範圍 a-d 或 X)'aXbc' REGEXP '[a-dXYZ]' -- 1
[^a-dX]排除字元集合'gheis' REGEXP '^[^a-dXYZ]+$' -- 1
[[:class:]]POSIX 字元類別'justalnums' REGEXP '[[:alnum:]]+' -- 1
[[:<:]], [[:>:]]單字邊界(開頭/結尾)'a word a' REGEXP '[[:<:]]word[[:>:]]' -- 1

常用 POSIX 字元類別

  • [:alnum:] 字母數字、[:alpha:] 字母、[:digit:] 數字
  • [:lower:] 小寫、[:upper:] 大寫、[:space:] 空白字元
  • [:punct:] 標點、[:xdigit:] 十六進位字元

轉義特殊字元

在 SQL 字串中,正則的特殊字元需雙重轉義(一層給 SQL 解析器,一層給正則引擎):

-- 匹配字面 "1+2"
SELECT '1+2' REGEXP '1\\+2'; -- 1 (正確)
SELECT '1+2' REGEXP '1+2';   -- 0 (被視為 1 後面接一個以上的 +)

實戰查詢範例

1. 找出以特定字母開頭的名稱(不分大小寫)

SELECT * FROM `products` WHERE `name` REGEXP '^[bB]';

2. 驗證手機號碼格式(台灣 09 開頭 10 碼)

SELECT * FROM `users` WHERE `phone` REGEXP '^09[0-9]{8}$';

3. 找出包含連續數字的欄位

SELECT * FROM `logs` WHERE `message` REGEXP '[0-9]{4,}';

4. 父子層級路徑匹配(如 0,1,2,3,)

SELECT * FROM `category` WHERE `path` REGEXP '^0,1,[0-9]*,$';

5. 單字邊界搜尋(避免部分匹配)

-- 只找獨立單字 "word"
SELECT * FROM `articles` WHERE `content` REGEXP '[[:<:]]word[[:>:]]';

效能注意事項

  • REGEXP 無法使用一般 B-Tree 索引,大表會全表掃描
  • 可考慮 FULLTEXT 索引或應用層預處理
  • MySQL 8.0+ 支援 REGEXP_REPLACE()、REGEXP_SUBSTR() 等進階函數

掌握 REGEXP 語法,能在資料清洗、格式驗證、模糊比對等場景大顯身手。

copyright © 萬盛學電腦網 all rights reserved