| 構造 | 說明 | 範例匹配 |
|---|---|---|
^ | 字串開頭 | 'abc' REGEXP '^a' |
$ | 字串結尾 | 'abc' REGEXP 'c$' |
. | 任意字元(含換行) | 'a\nc' REGEXP 'a.c' |
a* | 0 或多個 a | 'bc' REGEXP 'a*bc' |
a+ | 1 或多個 a | 'abc' REGEXP 'a+bc' |
a? | 0 或 1 個 a | 'bc' REGEXP 'a?bc' |
de|abc | de 或 abc | 'abc' REGEXP 'de|abc' |
(abc)* | abc 重複 0+ 次 | 'abcabc' REGEXP '(abc)*' |
{n}, {m,n} | 精確/範圍重複 | 'aaa' REGEXP 'a{2,3}' |
[abc] | 字元集合 | 'b' REGEXP '[abc]' |
[^abc] | 排除字元集合 | 'd' REGEXP '[^abc]' |
[a-z] | 字元範圍 | 'm' REGEXP '[a-z]' |
[[.coll.]] | 校對元素(如 [[.tilde.]]) | '~' REGEXP '[[.tilde.]]' |
[[=equiv=]] | 等價類 | 'o' REGEXP '[[=o=]]' |
[:class:] | POSIX 字元類別 | alnum, alpha, digit, space, upper, lower, xdigit... |
[[:<:]], [[:>:]] | 單字邊界 | 'a word' REGEXP '[[:<:]]word[[:>:]]' |
SQL 字串 → 正則引擎,需雙重轉義:
SELECT '1+2' REGEXP '1\\+2'; -- 正確匹配字面 1+2
SELECT '1+2' REGEXP '1+2'; -- 錯誤:+ 視為量詞
-- 1. 純字母數字
SELECT 'justalnums' REGEXP '[[:alnum:]]+'; -- 1
-- 2. 純標點
SELECT '!!' REGEXP '[[:alnum:]]+'; -- 0
-- 3. 開頭匹配
SELECT * FROM pet WHERE name REGEXP '^[bB]';
-- 4. 結尾匹配
SELECT * FROM pet WHERE name REGEXP 'fy$';
-- 5. 固定長度
SELECT * FROM pet WHERE name REGEXP '^.{5}$';
-- 6. 否定匹配(非 a-dXYZ 組成)
SELECT 'gheis' REGEXP '^[^a-dXYZ]+$'; -- 1
SELECT 'gheisa' REGEXP '^[^a-dXYZ]+$'; -- 0 (含 a)
-- 7. 中文/非 ASCII 近似(5.7)
SELECT * FROM articles WHERE content REGEXP '[^ -~]';
REGEXP 不走索引,大表慎用。REGEXP_LIKE()、REGEXP_SUBSTR()、REGEXP_REPLACE(),功能更強。FULLTEXT INDEX 或 Elasticsearch。LIKE 'prefix%' 可用索引。