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

MySQL 正則表達式入門:REGEXP 關鍵字完整指南

     編輯:MySQL 綜合教學

MySQL 的 LIKE 雖支援模糊查詢,但功能有限。REGEXP 引入正則表達式,大幅增強模式匹配能力。本文通過實戰數據集,系統講解核心用法。

測試數據準備

CREATE TABLE t_regcustomer (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(256),
    age INT
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

INSERT INTO t_regcustomer(name, age) VALUES 
('王明',20),('王大',21),('小王',22),('小王2',22),('敲不死',23),
('憨憨',24),('憨憨2',24),('郭靖名',25),('郭靖2',25),('郭靖3',25),
('郭得缸',25),('大鵬',20),('大鵬2',20),('大鵬3',20),('二鵬',19),
('鵬鵬',18),('鵬鵬1',18),('小鵬',17),('AAA',17),('aaa',17),('SS',17),
('s2',17),('ss',17);

核心語法與範例

1. 基礎匹配:任意單字符 .

SELECT * FROM t_regcustomer WHERE name REGEXP '.鵬.';

匹配包含「鵬」且前後各有一字符的記錄(如「大鵬」、「鵬鵬」)。

2. 邊界限定:^ 開頭、$ 結尾

SELECT * FROM t_regcustomer WHERE name REGEXP '^王';

僅匹配以「王」開頭的姓名。

3. 大小寫敏感:BINARY

SELECT * FROM t_regcustomer WHERE name REGEXP BINARY '^s';

區分大小寫,僅匹配小寫「s」開頭。

4. OR 邏輯:|

SELECT * FROM t_regcustomer WHERE name REGEXP BINARY 'a|s';

匹配包含「a」或「s」的記錄。

5. 字符集合:[...] 與範圍 [a-z]

-- 匹配「鵬」後跟 1/2/3
SELECT * FROM t_regcustomer WHERE name REGEXP BINARY '鵬[123]';
-- 匹配「鵬」後跟任意數字
SELECT * FROM t_regcustomer WHERE name REGEXP BINARY '鵬[1-9]';

6. 轉義特殊字符:\\

MySQL 需雙重轉義,如匹配字面點號:\\.

進階參考

更多語法(量詞、POSIX 字符類、定位符等)請參考《MySQL必知必會》第 68 頁正則表達式章節。

效能提示

  • REGEXP 無法使用普通索引,大表查詢建議配合全文索引或應用層預過濾
  • 複雜正則可能導致 CPU 飆升,生產環境謹慎使用

掌握 REGEXP,讓 SQL 查詢不再受限於 LIKE 的簡陋模式。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved