REGEXP 是 MySQL 強大的模式匹配工具,返回 1(匹配)或 0(不匹配),功能遠超 LIKE,相當於 LIKE '%%' 但支援完整正則語法。
| 元字符 | 含義 | 示例 | 匹配示例 |
|---|---|---|---|
^ | 行首 | 'abc' REGEXP '^a' | 1 |
$ | 行尾 | 'abc' REGEXP 'c$' | 1 |
. | 任意單字符 | 'abc' REGEXP 'a.c' | 1 |
* | 前字符 0~n 次 | 'ac' REGEXP 'ab*c' | 1 |
+ | 前字符 1~n 次 | 'abc' REGEXP 'ab+c' | 1 |
? | 前字符 0/1 次 | 'ac' REGEXP 'ab?c' | 1 |
[...] | 字符集合 | 'a' REGEXP '[abc]' | 1 |
[^...] | 排除字符集 | 'd' REGEXP '[^abc]' | 1 |
| | 或 | 'a' REGEXP 'a|b' | 1 |
(...) | 分組 | 'abab' REGEXP '(ab)+' | 1 |
{n},{n,},{n,m} | 量詞精確/至少/範圍 | 'aaa' REGEXP 'a{2,3}' | 1 |
[:class:] | 字符類 | 'a1' REGEXP '[[:digit:]]' | 1 |
-- 1. 以特定前綴開頭
SELECT 'username' REGEXP '^user'; -- 1
-- 2. 以特定後綴結尾
SELECT 'image.png' REGEXP '\.png$'; -- 1 (轉義點)
-- 3. 包含數字
SELECT 'abc123' REGEXP '[0-9]'; -- 1
-- 4. 純數字驗證
SELECT '12345' REGEXP '^[0-9]+$'; -- 1
-- 5. 手機號簡易驗證
SELECT '13800138000' REGEXP '^1[3-9][0-9]{9}$'; -- 1
-- 6. 郵箱簡易驗證
SELECT 'test@example.com' REGEXP '^[^@]+@[^@]+\.[^@]+$'; -- 1
-- 7. 替換 LIKE '%關鍵字%'(性能更好)
SELECT col FROM t WHERE col REGEXP '關鍵字';
| 維度 | LIKE | REGEXP |
|---|---|---|
| 語法複雜度 | 簡單(%、_) | 完整正則 |
| 前綴匹配用索引 | 支持 LIKE 'abc%' | 不支持索引 |
| 複雜模式 | 無法表達 | 靈活強大 |
| 執行速度 | 快(簡單模式) | 較慢(需正則引擎) |
最佳實踐:
• 簡單前綴/後綴/全匹配用 LIKE 利用索引
• 複雜格式驗證、提取、替換用 REGEXP
• 大數據量避免 REGEXP 全表掃描,考慮全文索引或應用層預處理