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

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

     編輯:MySQL 資料庫相關知識

為什麼需要 REGEXP

LIKE 僅支援 %(任意字串)、_(單字元),無法表達「開頭數字」、「郵箱格式」、「多選一」等複雜模式。REGEXP 引入正則表達式,大幅擴展模糊查詢能力。

核心語法

SELECT * FROM `t_regcustomer` WHERE `name` REGEXP 'pattern';

測試資料準備

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

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

常用模式與範例

需求REGEXP 模式說明
包含「鵬」'鵬'任意位置匹配
以「王」開頭'^王'^ 鎖定開頭
以「2」結尾'2$'$ 鎖定結尾
任意單字元 + 鵬 + 任意單字元'.鵬.'. 匹配任意一字元
大小寫敏感匹配「s」開頭BINARY '^s'BINARY 區分大小寫
或運算:包含 a 或 sBINARY 'a|s'| 表示或
字元集合:鵬後跟 1/2/3'鵬[123]'[] 字元類別
範圍:鵬後跟 1-9'鵬[1-9]'- 表示範圍
排除:鵬後非數字'鵬[^0-9]'^ 在 [] 內表示非
量詞:一個或多個數字'[0-9]+'+ ≥1,* ≥0,? 0或1
分組:郵箱簡易'^[^@]+@[^@]+\\.[^@]+$'() 分組,\\. 轉義點

進階技巧

1. 結合 WHERE 條件

SELECT * FROM `t_regcustomer`
WHERE `name` REGEXP '^大鵬[0-9]*$' AND `age` > 18;

2. 正則替換(MySQL 8.0+ REGEXP_REPLACE)

SELECT REGEXP_REPLACE(`name`, '[0-9]', '') AS `clean_name` FROM `t_regcustomer`;

3. 正則提取(MySQL 8.0+ REGEXP_SUBSTR)

SELECT REGEXP_SUBSTR(`name`, '[0-9]+') AS `first_number` FROM `t_regcustomer`;

效能與注意事項

  • REGEXP 不使用索引(全表掃描),大表慎用。
  • 可結合 LIKE 粗略過濾再 REGEXP 精確匹配:
    WHERE name LIKE '%鵬%' AND name REGEXP '^大鵬[0-9]*$'
  • MySQL 使用 Henry Spencer 正則庫,支援 POSIX 1003.2 規範,不支援 PCRE 進階語法(如 \\d、\\w、前瞻/後顧)。
  • 字元集影響匹配:utf8mb4 下中文字元視為單字元,. 可匹配。

結語

REGEXP 讓 MySQL 具備強大的模式匹配能力,適合資料清洗、異常檢測、格式驗證等場景。掌握^ $ . [] | + * ? () BINARY 核心語法,配合 LIKE 索引預過濾,能在不引入外部引擎下完成 90% 複雜匹配需求。

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