首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 正則表達式 REGEXP 入門實戰:基本字元、邊界、字元類、量詞、分組與效能建議

     編輯:MySQL 資料庫相關知識

REGEXP 讓 SQL 擁有比 LIKE 強大得多的模式比對能力,支援 POSIX 正則語法。本文從建表測試資料出發,逐步講解字元匹配、邊界、字元類、量詞、分組、轉義與大小寫控制,附效能建議。

測試資料準備


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

INSERT INTO t_regcustomer(name,age) VALUES
('王明',20),('王大',21),('小王',22),('小王2',22),
('鵬鵬',18),('鵬鵬1',18),('大鵬',20),('大鵬2',20),('大鵬3',20),
('AAA',17),('aaa',17),('SS',17),('s2',17),('ss',17);

核心語法速查

語法說明範例匹配結果
.任意單一字元name REGEXP '.鵬.'鵬鵬、大鵬2、小鵬
^pattern開頭匹配name REGEXP '^王'王明、王大
pattern$結尾匹配name REGEXP '鵬$'鵬鵬、大鵬
[abc]字元集合 (任一)name REGEXP '鵬[123]'鵬鵬1、大鵬1、大鵬2、大鵬3
[0-9]範圍name REGEXP '鵬[0-9]'同上
[^0-9]排除範圍name REGEXP '[^0-9]'非純數字
|或邏輯name REGEXP '王|鵬'含王或鵬
* + ?量詞 0*/1+/0-1name REGEXP '鵬[0-9]+'鵬後接 1 位以上數字
{n,m}量詞範圍name REGEXP '[0-9]{1,3}'1-3 位數字
[[:digit:]]POSIX 字元類name REGEXP '[[:digit:]]'含數字
\\轉義 (MySQL 需雙重)name REGEXP '\\.'字面點號
BINARY大小寫敏感name REGEXP BINARY '^s'僅小寫 s 開頭
[[:<:]] [[:>:]]單詞邊界name REGEXP '[[:<:]]王'王為單詞開頭

效能與最佳實務

  • REGEXP 無法使用索引 (8.0 除非 functional index),全表掃描,大表慎用。
  • 可先用 LIKE 'prefix%' 走索引過濾大部份資料,再套用 REGEXP 精準匹配。
  • 複雜正則考慮在應用層處理,或使用 RLIKE (同義詞) 保持語義清晰。
  • MySQL 8.0 引入 REGEXP_REPLACE()、REGEXP_SUBSTR()、REGEXP_INSTR(),支援擷取/替換/位置。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved