MySQL REGEXP (別名 RLIKE) 支援 POSIX 1003.2 正則標準。本文系統整理 8 大核心語法類別、POSIX 字元類對照表、量詞貪婪/非貪婪、邊界斷言、雙重轉義規則,並預覽 MySQL 8.0 新增 REGEXP_REPLACE/SUBSTR/INSTR 三大函數。
| 類別 | 語法 | 說明 | 範例 |
|---|---|---|---|
| 基本字元 | . | 任意單一字元 (含換行需 s 修飾符 8.0+) | 'a.c' REGEXP 'a.c' |
\\ | 轉義 (MySQL 字串需雙重 \\\\) | '1.0' REGEXP '1\\.0' | |
| 字元集合 | [abc] | 任一字元 | 'ton' REGEXP '[123]ton' |
[a-z] | 範圍 | 'a1' REGEXP '[a-z][0-9]' | |
[^abc] | 排除 | 'abc' REGEXP '[^d]' | |
| POSIX 字元類 | [[:digit:]] | 數字 [0-9] | 'name1' REGEXP 'name[[:digit:]]' |
[[:alpha:]] | 字母 [A-Za-z] | 同上 | |
| 量詞 | * + ? {n} {n,} {n,m} | 0*/1+/0-1/定長/下限/範圍 (m≤255) | '100' REGEXP '[0-9]{1,3}' |
| 邊界斷言 | ^ $ [[:<:]] [[:>:]] | 行首/行尾/單詞首/單詞尾 | 'hello' REGEXP '^[[:<:]]hel' |
| 分組/替換 | () | | 捕獲組/或邏輯 (MySQL 不支援反向引用 \1) | 'cat' REGEXP 'cat|dog' |
| 大小寫控制 | BINARY | 區分大小寫 | 'Abc' REGEXP BINARY '^a' 不匹配 |
| 類別 | 等價 | 說明 |
|---|---|---|
[[:alnum:]] | [A-Za-z0-9] | 字母數字 |
[[:alpha:]] | [A-Za-z] | 字母 |
[[:blank:]] | [ \t] | 空格製表 |
[[:cntrl:]] | ASCII 0-31,127 | 控制字元 |
[[:digit:]] | [0-9] | 數字 |
[[:graph:]] | [[:print:]] 扣空格 | 可見字元 |
[[:lower:]] | [a-z] | 小寫 |
[[:print:]] | 可列印字元 | 含空格 |
[[:punct:]] | 標點符號 | 非字母數字非控制 |
[[:space:]] | [ \t\n\r\f\v] | 空白字元 |
[[:upper:]] | [A-Z] | 大寫 |
[[:xdigit:]] | [A-Fa-f0-9] | 十六進位 |
| 函數 | 語法 | 用途 | 範例 |
|---|---|---|---|
REGEXP_LIKE | REGEXP_LIKE(expr, pat[, match_type]) | 替代 REGEXP,支援 c/i/m/n 模式修飾符 | REGEXP_LIKE(col, '^abc$', 'c') |
REGEXP_SUBSTR | REGEXP_SUBSTR(expr, pat[, pos[, occ[, match_type]]]) | 擷取匹配子串 | REGEXP_SUBSTR('abc123def', '[0-9]+') → '123' |
REGEXP_INSTR | REGEXP_INSTR(expr, pat[, pos[, occ[, match_type]]]) | 回傳匹配位置 | REGEXP_INSTR('abc123', '[0-9]+') → 4 |
REGEXP_REPLACE | REGEXP_REPLACE(expr, pat, repl[, pos[, occ[, match_type]]]) | 正則替換 | REGEXP_REPLACE('a1b2', '[0-9]', 'X') → 'aXbX' |
REGEXP 全表掃描,無法使用 B-Tree 索引 (8.0 可建 Functional Index 部分支援)。LIKE 'prefix%' 過濾再套用正則。re, Java Pattern) 處理更靈活高效。