萬盛學電腦網

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

MySQL 正則表達式 REGEXP 完整語法與實戰指南

MySQL REGEXP 正則表達式:語法詳解與高級實戰

MySQL REGEXP 操作符支持正則表達式模式匹配,功能遠超 LIKE。本文系統整理元字符、字符類、量詞、定位符及實戰技巧。

核心元字符速查表

元字符含義示例匹配
^字符串開始'^st' 匹配以 st 開頭
$字符串結束'ok$' 匹配以 ok 結尾
.任意單字符'a.c' 匹配 abc, axc
[...]字符集合'[aeiou]' 匹配任意元音
[^...]排除字符集'[^0-9]' 匹配非數字
p1|p2|p3分支/或'cat|dog|fish'
*0次或多次'ab*c' 匹配 ac, abc, abbc
+1次或多次'ab+c' 匹配 abc, abbc
?0次或1次'ab?c' 匹配 ac, abc
{n}恰好 n 次'a{3}' 匹配 aaa
{n,}至少 n 次'a{2,}' 匹配 aa, aaa...
{n,m}n 到 m 次'a{2,4}' 匹配 aa, aaa, aaaa

字符類別簡寫

POSIX 類別等價於說明
[:alnum:][a-zA-Z0-9]字母數字
[:alpha:][a-zA-Z]字母
[:digit:][0-9]數字
[:lower:][a-z]小寫字母
[:upper:][A-Z]大寫字母
[:space:][ \t\r\n\v\f]空白字符
[:blank:][ \t]空格和製表符
[:punct:][-!"#$%&'()*+,./:;<=>?@[\\\]^_`{|}~]標點符號
[:xdigit:][0-9a-fA-F]十六進制數字

定位符與邊界

定位符含義
^字符串開始
$字符串結束
[[:<:]]詞邊界開始
[[:>:]]詞邊界結束

實戰示例

1. 基礎模式匹配

-- 以 st 開頭
SELECT name FROM person WHERE name REGEXP '^st';

-- 以 ok 結尾
SELECT name FROM person WHERE name REGEXP 'ok$';

-- 包含 mar
SELECT name FROM person WHERE name REGEXP 'mar';

-- 以元音開頭或以 ok 結尾
SELECT name FROM person WHERE name REGEXP '^[aeiou]|ok$';

2. 範圍與重複

-- 匹配 1-5 後跟 Ton
SELECT prod_name FROM products WHERE prod_name REGEXP '[1-5] Ton';

-- 匹配連續 4 位數字
SELECT prod_name FROM products WHERE prod_name REGEXP '[[:digit:]]{4}';
-- 等價於
SELECT prod_name FROM products WHERE prod_name REGEXP '[0-9][0-9][0-9][0-9]';

3. 特殊字符轉義

-- 匹配字面點號
SELECT * FROM t WHERE col REGEXP '\\.';

-- 匹配字面反斜杠
SELECT * FROM t WHERE col REGEXP '\\\\';

4. 詞邊界精確匹配

-- 匹配獨立單詞 word
SELECT * FROM t WHERE col REGEXP '[[:<:]]word[[:>:]]';

-- 匹配以 wee 或 week 開頭,以 knights 或 nights 結尾
SELECT 'weeknights' REGEXP '^(wee|week)(knights|nights)$';  -- 1 (匹配)

REGEXP vs LIKE 關鍵差異

大小寫敏感控制

-- 不區分大小寫(默認)
SELECT 'Hello' REGEXP 'hello';  -- 1

-- 區分大小寫
SELECT 'Hello' REGEXP BINARY 'hello';  -- 0
SELECT 'Hello' REGEXP BINARY 'Hello';  -- 1

性能優化建議

  • 避免在大表全字段使用 REGEXP,優先用 LIKE 'prefix%' 利用索引
  • 將正則條件放在 WHERE 後面,配合其他索引條件過濾
  • 複雜正則考慮應用層處理或使用全文索引
  • MySQL 8.0+ 支持 REGEXP_LIKE()、REGEXP_SUBSTR()、REGEXP_REPLACE() 更豐富函數
copyright © 萬盛學電腦網 all rights reserved
特性LIKEREGEXP
匹配範圍整列匹配子串匹配(除非用 ^$ 定位)
通配符% _完整正則語法
大小寫敏感取決於校對規則默認不敏感,用 BINARY 區分
性能較快(可用索引前綴)較慢(全表掃描)