导读:本期聚焦于小伙伴创作的《SQL 正则表达式 REGEXP 怎么用?有哪些常见应用案例》,敬请观看详情。从一段查询用户表的慢SQL切入,不少人在模糊匹配时只会用LIKE,遇到复杂规则就束手无策。REGEXP借助正则语法能在数据库层完成邮箱格式校验、手机号段筛选、脏数据清理等任务。本文以MySQL为例,说明REGEXP基础写法,对比LIKE局限,给出邮箱验证、多值匹配、排除特定前缀等实用案例,并提醒注意大小写敏感与索引失效问题,帮助你在查询中精准提取目标数据。

在数据库查询中,当匹配规则变得复杂,传统的LIKE运算符往往力不从心。SQL标准中的REGEXP(或RLIKE)操作符允许我们使用正则表达式直接在数据库层面完成模式匹配,从而解决诸如格式校验、复杂字符串提取等问题。不同数据库对正则的支持略有差异,本文以最常见的MySQL为例展开说明。

SQL 正则表达式 REGEXP 怎么用?有哪些常见应用案例

一、REGEXP 基础语法与 LIKE 的局限

在MySQL中,REGEXP用于判断字符串是否匹配指定正则表达式,返回1表示匹配,0表示不匹配。基本写法为:column REGEXP 'pattern'。与LIKE不同,REGEXP不需要用百分号包裹,且支持字符类、量词、分组等完整正则特性。

LIKE仅支持%_两种通配符,例如LIKE 'a%'只能表示以a开头。如果我们要匹配“以a开头且第三位为数字”的字段,LIKE无法实现,而REGEXP可以用'^a.[0-9]'轻松表达。下面的代码展示了两者的简单对比:

-- LIKE 只能做简单前缀匹配
SELECT name FROM user WHERE name LIKE '张%';

-- REGEXP 可匹配以张开头且名字为两个汉字
SELECT name FROM user WHERE name REGEXP '^张.{1}$';

需要注意的是,REGEXP默认不区分大小写,若需区分可使用REGEXP BINARY或二进制校验。另外,REGEXP操作通常无法利用普通B树索引,在大数据表上应控制使用范围,避免全表扫描带来的性能损耗。

二、常见应用案例

1. 邮箱格式校验

用户注册时常常需要过滤掉非法邮箱。虽然完整邮箱正则非常复杂,但在数据库层做一个基础格式筛查很实用。我们可以要求字符串包含“@”且域名为字母数字加点号的组合。

以下语句找出符合基础邮箱格式的账号,排除明显错误的数据,如缺少@或连续点号的情况:

SELECT email
FROM user
WHERE email REGEXP '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$';

该正则要求开头是常见邮箱本地名字符,接着一个@,然后是域名和至少两级的点分结构。虽然它不能替代后端完整校验,但能快速清理库中明显异常的记录。

2. 手机号段筛选

国内手机号以1开头,第二位通常是3到9。使用REGEXP可以精准筛选出符合规则的号码,或反向排除测试号段。

比如提取真实用户手机号,排除以100、110等特服号开头的脏数据:

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

这里的^1[3-9][0-9]{9}$表示以1开头、第二位3至9、后续九位数字共十一位。相比用多个LIKE拼接,REGEXP逻辑更清晰且易于维护。

3. 排除特定前缀的日志查询

系统日志表常混杂调试与业务日志。若想查出不是以“DEBUG”或“TEST”开头的条目,可借助正则的否定逻辑。

利用^(?!DEBUG|TEST)这类前瞻不适合MySQL基础正则,因此我们改用反向匹配思路,先选出不符合的再取反,或直接写排除式:

SELECT log_text
FROM app_log
WHERE log_text REGEXP '^(ERROR|WARN|INFO)';

上述语句只保留以ERROR、WARN、INFO开头的正式日志,绕开了不支持前瞻的限制。若数据库为PostgreSQL,则可使用更强大的~操作符与前瞻语法。

三、使用 REGEXP 的注意事项

首先是性能问题。REGEXP会对每行进行正则引擎计算,若表数据量达到百万级且没有其它索引过滤,查询会非常慢。建议先通过时间范围或状态字段缩小结果集,再使用REGEXP做精细匹配。

其次是转义差异。在SQL字符串里,反斜杠本身需要转义,所以正则中的d要写成\d。如果是在存储过程或程序拼接语句,更要留意语言层与SQL层双重转义导致的错误。最后,不同数据库函数名不同,MySQL用REGEXP,PostgreSQL用~,Oracle可用REGEXP_LIKE函数,迁移时需注意语法适配。

四、小结

REGEXP是SQL中处理复杂字符串匹配的有力工具,在邮箱校验、号段提取、日志过滤等场景中比LIKE更灵活。掌握基础正则语法并认清其索引局限,就能在合适的业务环节用最少的代码完成精准查询。

SQLREGEXP正则表达式修改时间:2026-08-05 22:12:25

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。