| 元字符 | 含義 | 示例 | 匹配示例 |
|---|---|---|---|
^ | 字符串開始 | '^L' | 以 L 開頭的 name |
$ | 字符串結束 | 'end$' | 以 end 結尾 |
. | 任意單字符(含換行) | 'a.c' | abc、axc、a\nc |
[...] | 字符集合任一 | '[a-z0-9]' | 小寫字母或數字 |
[^...] | 排除字符集合 | '[^0-9]' | 非數字字符 |
| | 或邏輯 | 'cat|dog|fish' | cat 或 dog 或 fish |
* | 前字符 0 次或多次 | 'a*c' | c、ac、aac、aaac... |
+ | 前字符 1 次或多次 | 'a+c' | ac、aac、aaac...(至少 1 個 a) |
{n} | 前字符恰好 n 次 | 'ab{3}' | abbb |
{m,n} | 前字符 m~n 次 | 'ab{1,3}' | ab、abb、abbb |
(...) | 分組 | '(ab){1,3}' | ab、abab、ababab |
-- 1. 以 L 開頭
SELECT * FROM info WHERE name REGEXP '^L';
-- 2. 包含 c、e、o 任一字母
SELECT * FROM info WHERE name REGEXP '[ceo]';
-- 3. a 可有可無,後跟 c(即 c 或 ac、aac...)
SELECT * FROM info WHERE name REGEXP 'a*c';
-- 4. b 至少 1 次,最多 3 次(ab、abb、abbb)
SELECT * FROM info WHERE name REGEXP 'ab{1,3}';
-- 5. 字符串 "ab" 整體出現 1~3 次
SELECT * FROM info WHERE name REGEXP '(ab){1,3}';
-- 注意:出現 4 次也會匹配(因為含有 3 次的子串),需用 ^(ab){1,3}$ 精確限制
-- 僅匹配 "ab"、"abab"、"ababab"
SELECT * FROM info WHERE name REGEXP '^(ab){1,3}$';
utf8mb4_0900_ai_ci **不區分大小寫**REGEXP BINARY '^Abc$' 或 COLLATE utf8mb4_binREGEXP 通常**無法使用索引**,全表掃描WHERE name LIKE 'L%' 替代 REGEXP '^L'-- 提取首個數字串
SELECT REGEXP_SUBSTR('Order-12345-Item', '[0-9]+'); -- 12345
-- 替換所有非數字為空
SELECT REGEXP_REPLACE('Price: $1,234.56', '[^0-9.]', ''); -- 1234.56
MySQL REGEXP 基於 POSIX 1003.2 標準,功能強大但**不走索引**。日常開發掌握 ^ $ . [...] [^...] | * + {m,n} () 核心元字符覆蓋 90% 場景。大表生產環境優先考慮 LIKE、全文索引或應用層預處理,必要時使用 REGEXP 並配合 EXPLAIN 驗證執行計劃。