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

MySQL 正則表達式 REGEXP 入門:從 LIKE 到進階模式匹配

     編輯:MySQL 綜合教學

為什麼需要 REGEXP?

LIKE 僅支持 %(任意字符)與 _(單字符)通配,無法表達「以某字符開頭」、「包含數字」、「多選一」等複雜模式。MySQL 的 REGEXP 引入 POSIX 正則子集,彌補此短板。

測試數據準備

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);

核心語法與實例

需求SQL 片段說明
包含「鵬」WHERE name REGEXP '鵬'等同 LIKE '%鵬%'
任意單字符 + 鵬 + 任意單字符WHERE name REGEXP '.鵬.'. 匹配任意單字符
以「王」開頭WHERE name REGEXP '^王'^ 錨定行首
以「2」結尾WHERE name REGEXP '2$'$ 錨定行尾
大小寫敏感匹配「s」開頭WHERE name REGEXP BINARY '^s'BINARY 強制二進制比較
包含 a 或 sWHERE name REGEXP BINARY 'a|s'| 表示或
「鵬」後跟 1/2/3WHERE name REGEXP BINARY '鵬[123]'[] 字符組
「鵬」後跟任意數字WHERE name REGEXP BINARY '鵬[0-9]'- 表示範圍
轉義特殊字符WHERE name REGEXP '\\.'雙反斜杠轉義

進階技巧

  • REGEXP 不區分大小寫(預設),加 BINARY 區分
  • MySQL 8.0+ 支持 REGEXP_REPLACE()、REGEXP_SUBSTR() 等新函數
  • 複雜正則在大表上會導致全表掃描,建議配合前綴索引或全文索引優化

更多語法請參考《MySQL必知必會》第 68 頁正則表達式章節。

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