«

MySQL REGEXP正则匹配查询用法

时间:2026-11-15 07:30     作者:emer     分类: 无


MySQL 的 REGEXP(同义 RLIKE)用于按正则表达式匹配字符串,比 LIKE 通配符强大得多。LIKE 只能写 % 和 _ 做简单前后模糊,遇到「以数字开头」「包含连续三个字母」「手机号段校验」这类条件就力不从心,这时就要用 REGEXP。本文讲清基本语法、常用元字符和实战查询。

一、基本写法

SELECT * FROM users WHERE username REGEXP '^admin';

REGEXP 放在字段和模式之间,匹配成功返回 1。取反用 NOT REGEXP:

SELECT * FROM users WHERE email NOT REGEXP '@';

注意:REGEXP 不区分大小写(取决于校对集),要严格区分可加 BINARY。

二、常用元字符

三、实战示例

以数字开头的用户名:

SELECT * FROM users WHERE username REGEXP '^[0-9]';

校验手机号(11 位、1 开头):

SELECT * FROM users WHERE phone REGEXP '^1[3-9][0-9]{9}$';

包含连续两个相同字母:

SELECT * FROM words WHERE name REGEXP '([a-z])\\1';

匹配邮箱大致格式:

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

四、REGEXP 与 LIKE 怎么选

-- LIKE:只支持 % 与 _
SELECT * FROM goods WHERE title LIKE '%手机%';

-- REGEXP:规则化匹配
SELECT * FROM goods WHERE title REGEXP '手机|平板|电脑';

简单包含用 LIKE 更省资源;需要边界、字符类、重复次数时用 REGEXP。

五、常见坑

  1. REGEXP 走不到普通索引,大表全表扫描会很慢,只适合小表或后台筛选。
  2. 反斜杠在 SQL 字符串里要写两个 \\,否则被 MySQL 先解析一层。
  3. 忘记写 ^ 和 $,变成只要包含即可,结果范围过大。
  4. 中文匹配受字符集影响,[一-龥] 类写法在 utf8mb4 下不一定可靠。
  5. 把正则当强校验,前端/后端仍需独立校验,数据库正则只是粗筛。
  6. 大小写敏感需求忘了加 BINARY。

总结

REGEXP 适合规则化的字符串筛选:^、$ 定边界,[] 定字符集,{n,m} 定重复次数,竖线表或。它不走索引,别在大表高频查询里硬用;简单模糊仍优先 LIKE。

遇到问题加QQ23979811 协助处理

标签: MySQL REGEXP 正则匹配 LIKE 字符串筛选