萬盛學電腦網

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

MySQL 正則表達式篩選中文/英文記錄完整指南

MySQL REGEXP 正則表達式實戰:精準篩選中英文資料

核心需求場景

資料表 items 中 name 欄位混雜中英文,需分別篩選:

entry  name           cost
123    魔法披風        100
124    角斗士勳章      200
125    Maxcuh          300  ← 純英文
126    勇者徽章        400
127    Ulisanise       500  ← 純英文
128    HP回復          600

篩選純英文記錄

-- 方法一:使用字符類 [[:alpha:]]
SELECT * FROM items WHERE name REGEXP '^[[:alpha:]]+$';

-- 方法二:排除非字母開頭
SELECT * FROM items WHERE name NOT REGEXP '^[^A-Za-z]';

結果:僅返回 entry 125 (Maxcuh) 和 127 (Ulisanise)。

篩選包含中文記錄

-- 方法一:匹配中文 Unicode 範圍 (MySQL 8.0+)
SELECT * FROM items WHERE name REGEXP '[\\x{4e00}-\\x{9fa5}]';

-- 方法二:排除純英文數字
SELECT * FROM items WHERE name REGEXP '[^A-Za-z0-9]';

MySQL 正則核心語法速查表

元字符說明範例
^字符串開頭'^abc' 匹配以 abc 開頭
$字符串結尾'abc$' 匹配以 abc 結尾
.任意單字符'a.c' 匹配 aac, abc, acc...
*零次或多次'ab*c' 匹配 ac, abc, abbc...
+一次或多次'ab+c' 匹配 abc, abbc... (不含 ac)
?零次或一次'ab?c' 匹配 ac, abc
[abc]字符集合'[aeiou]' 匹配任一母音
[^abc]排除字符集'[^0-9]' 匹配非數字
[[:alpha:]]字母字符類等同 [A-Za-z]
[[:digit:]]數字字符類等同 [0-9]
[[:alnum:]]字母數字類等同 [A-Za-z0-9]

進階實戰範例

邊界匹配

-- 單詞邊界 [[:<:]] [[:>:]] (MySQL 8.0 棄用,改用 \\b)
SELECT 'a word a' REGEXP '[[:<:]]word[[:>:]]';  -- 1 (匹配)
SELECT 'a xword a' REGEXP '[[:<:]]word[[:>:]]'; -- 0 (不匹配)

分組與或邏輯

SELECT 'weeknights' REGEXP '^(wee|week)(knights|nights)$'; -- 1

等價類別

-- [[=o=]] 匹配 o 及其等價字符(如帶音標字符)

效能建議

  • 避免全表掃描:在 WHERE 條件前加上索引欄位過濾
  • 簡單模式優先用 LIKE,複雜模式才用 REGEXP
  • MySQL 8.0 正則引擎升級為 ICU,支援完整 Unicode 屬性

掌握 REGEXP 可大幅簡化複雜字符串篩選邏輯,是資料清洗與分析的利器。

copyright © 萬盛學電腦網 all rights reserved