正則表達式是資料庫模糊查詢、資料清洗與驗證的利器。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 |
[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 (無排除字元)
| 類別名稱 | 涵蓋字元 |
|---|---|
[: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 不被視為單字開頭)
^pattern$ 可大幅縮小掃描範圍,避免全表掃描。(a+)+ 類模式極易導致災難性回溯。. 與 [...] 行為可能與預期不同,測試時請指定 COLLATE。SELECT '測試字串' REGEXP '你的正則'; -- 回傳 1 或 0
將上述查詢存為片段,隨時驗證正則邏輯,開發效率倍增。