首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 正則表達式查詢完全指南:REGEXP 操作符語法與實戰案例

     編輯:MySQL 綜合教學

基礎語法

SELECT * FROM table_name WHERE column_name REGEXP 'pattern';
-- 或不區分大小寫
SELECT * FROM table_name WHERE column_name REGEXP 'pattern' COLLATE utf8mb4_general_ci;

元字符速查表

元字符含義示例匹配樣例
^字符串開頭'^A'Apple, Admin
$字符串結尾'ing$'Testing, Running
.任意單字符(含換行)'a.c'abc, axc, a-c
[abc]字符集合:任一字符'[aeiou]'包含任意元音
[^abc]排除字符集合'[^0-9]'非數字字符
|或邏輯'cat|dog|fish'包含 cat 或 dog 或 fish
*前字符 0 次或多次'ab*c'ac, abc, abbc, abbbc...
+前字符 1 次或多次'ab+c'abc, abbc, abbbc... (不匹配 ac)
{n}前字符恰好 n 次'a{3}'aaa
{m,n}前字符 m 到 n 次'ab{1,3}'ab, abb, abbb

實戰案例

1. 驗證郵箱格式(簡化版)

SELECT email FROM users 
WHERE email REGEXP '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$';

2. 查找包含中文的記錄

SELECT * FROM articles 
WHERE content REGEXP '[\\x{4e00}-\\x{9fa5}]';
-- 注意:MySQL 8.0+ 支持 Unicode 屬性 \p{Han}

3. 提取手機號(中國大陸)

SELECT phone FROM contacts 
WHERE phone REGEXP '^1[3-9]\\d{9}$';

4. 模糊匹配多個關鍵詞

SELECT * FROM products 
WHERE name REGEXP 'iPhone|iPad|MacBook|Apple Watch';

進階技巧

捕獲組與替換 (MySQL 8.0+)

-- 將電話號碼格式化:13800138000 -> 138-0013-8000
SELECT REGEXP_REPLACE(phone, '^(\\d{3})(\\d{4})(\\d{4})$', '\\1-\\2-\\3') AS formatted
FROM contacts;

性能優化建議

  • 避免前導通配符:'%abc%' (LIKE) 或 '.*abc' (REGEXP) 導致全表掃描。
  • 錨定開頭:'^abc' 可利用索引(前綴索引)。
  • 複雜正則考慮應用層處理:數據庫擅長集合運算,複雜文本解析建議在應用層完成。
  • REGEXP **不使用索引**(MySQL 8.0 前),全表掃描。大表慎用,或配合全文索引/應用層預過濾。

REGEXP vs LIKE

特性LIKEREGEXP
通配符% (任意長度), _ (單字符)完整正則元字符集
性能較快,前綴可用索引較慢,通常全表掃描
適用場景簡單前綴/後綴/包含匹配複雜格式驗證、提取、轉換
大小寫敏感取決於排序規則取決於排序規則,可用 COLLATE 指定
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved