萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL REGEXP 正則表達式完整語法與實戰範例

REGEXP 操作元字元完整表

構造說明範例匹配
^字串開頭'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|abcde 或 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 不走索引,大表慎用。
  • MySQL 8.0 新增 REGEXP_LIKE()、REGEXP_SUBSTR()、REGEXP_REPLACE(),功能更強。
  • 全文搜尋請用 FULLTEXT INDEX 或 Elasticsearch。
  • 固定前綴匹配改用 LIKE 'prefix%' 可用索引。
copyright © 萬盛學電腦網 all rights reserved