MYSQL中REGEXP的实现示例

 更新时间:2025年08月26日 08:48:41   作者:nice_lcj520  
本文主要介绍了MYSQL中REGEXP的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

MySQL 的 REGEXP 函数是处理复杂字符串匹配的 “瑞士军刀”,掌握它能大幅提升数据筛选效率。

一、基础扫盲:先搞懂 “是什么”

1. 什么是正则表达式?

用一句话解释:正则表达式是一套用于描述字符串模式的规则,通过特殊符号(元字符)定义匹配逻辑,比如 “匹配以字母开头、数字结尾的字符串”。

2. MySQL 中 REGEXP 的用法

  • 基础语法:column REGEXP 'pattern'(返回 1 表示匹配,0 表示不匹配)。
  • 举例:SELECT * FROM users WHERE email REGEXP '@gmail\\.com$';(匹配 gmail 邮箱,注意.需要转义)。
  • 与 LIKE 的核心区别:
特性LIKEREGEXP
匹配方式仅支持%(任意字符)和_(单个字符)支持元字符(^、$、*等),功能更灵活
部分匹配需用%pattern%实现默认就是部分匹配(无需通配符)
转义符依赖数据库设置统一用\\转义(如\\.匹配小数点)

三、核心语法:元字符与示例(重中之重)

元字符作用MySQL 示例(匹配目标)
^匹配字符串开头'^abc' → 匹配 “abc123”“abcdef”
$匹配字符串结尾'xyz$' → 匹配 “123xyz”“xxyz”
.匹配任意单个字符(除换行)'a.c' → 匹配 “abc”“a1c”“a#c”
*匹配前一个字符 0 次或多次'ab*c' → 匹配 “ac”“abc”“abbbbc”
+匹配前一个字符 1 次或多次'ab+c' → 匹配 “abc”“abbbbc”(不匹配 “ac”)
?匹配前一个字符 0 次或 1 次'ab?c' → 匹配 “ac”“abc”(不匹配 “abbc”)
[ ]匹配括号内任意单个字符'[0-9]' → 匹配任意数字;'[a-zA-Z]'匹配字母
[^ ]匹配不在括号内的任意字符'[^0-9]' → 匹配非数字字符
{n}匹配前一个字符恰好 n 次'a{3}' → 匹配 “aaa”
{n,}匹配前一个字符至少 n 次'a{2,}' → 匹配 “aa”“aaa” 等
{n,m}匹配前一个字符 n 到 m 次'a{1,3}' → 匹配 “a”“aa”“aaa”

注意:MySQL 的 REGEXP 默认不区分大小写,若需区分,可使用REGEXP BINARY,例如'abc' REGEXP BINARY 'ABC'返回 0(不匹配)。

四、实战案例:用 REGEXP 解决实际问题

这部分是博客的 “灵魂”,结合具体场景展示用法,读者可直接复用:

1. 验证格式合法性

匹配手机号(以 1 开头,11 位数字):

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

匹配邮箱(含 @和域名后缀):

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

2. 筛选包含特定模式的字符串

提取包含数字的用户名

SELECT username FROM user WHERE username REGEXP '[0-9]';

排除包含特殊字符(如!、@)的记录

SELECT * FROM user WHERE username NOT REGEXP '[!@#$%]';

3. 替换或清洗数据(结合 REGEXP_REPLACE)

MySQL 8.0 及以上支持REGEXP_REPLACE,例如清除字符串中的所有空格:

SELECT REGEXP_REPLACE(address, ' ', '') AS clean_address FROM user;

五、避坑指南:这些 “坑” 别踩

  1. 转义符的坑:MySQL 中需用\\转义(而非标准正则的\),例如匹配小数点需写\\.,否则.会被解释为 “任意字符”。
  2. 性能问题:REGEXP 匹配会全表扫描(无法使用索引),避免在大数据量表中用复杂正则,可先通过 WHERE 条件缩小范围。
  3. 版本差异:低版本 MySQL(如 5.7)不支持{n,m}?等元字符,需用*+替代;MySQL 8.0 新增对正则捕获组的支持(REGEXP_SUBSTR)。
  4. 部分匹配的 “陷阱”column REGEXP 'abc'会匹配 “abc”“xabc”“abcx”,若需精确匹配整个字符串,需加^$(如'^abc$')。

六、进阶:REGEXP 与其他函数结合

  • REGEXP_INSTR:返回匹配内容在字符串中的位置,例如REGEXP_INSTR('abc123', '[0-9]')返回 4(第一个数字的位置)。
  • REGEXP_SUBSTR:提取匹配的子串,例如REGEXP_SUBSTR('电话:13800138000', '[0-9]{11}')返回 “13800138000”。

七、总结:REGEXP 学习路径

  1. 记住常用元字符(^$.*[]是基础);
  2. 先在测试库用简单案例练习(如匹配数字、字母);
  3. 复杂场景分步骤拆解(如邮箱验证可拆分为 “用户名 +@+ 域名 + 后缀”);
  4. 善用 MySQL 官方文档(点击查看)查询版本特性。

一句话收尾:REGEXP 是 MySQL 字符串处理的 “进阶技能”,看似复杂,实则掌握规律后能大幅提升效率 —— 从今天开始,告别繁琐的 LIKE 嵌套吧!

到此这篇关于MYSQL中REGEXP的实现示例的文章就介绍到这了,更多相关MYSQL REGEXP内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 检查并修复mysql数据库表的具体方法

    检查并修复mysql数据库表的具体方法

    这篇文章介绍了检查并修复mysql数据库表的具体方法,有需要的朋友可以参考一下
    2013-09-09
  • MySQL查询数据库中某个库、表、索引等所占空间的大小

    MySQL查询数据库中某个库、表、索引等所占空间的大小

    MySQL是一个非常流行的关系型数据库管理系统,它的查询操作是非常强大和灵活的。查询的效率不仅取决于表的大小,而且还取决于索引的大小,本文主要介绍了MySQL查询数据库中某个库、表、索引等所占空间的大小,感兴趣的可以了解一下
    2024-01-01
  • mysql双游标嵌套循环方式

    mysql双游标嵌套循环方式

    这篇文章主要介绍了mysql双游标嵌套循环方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • MySQL实现优雅统计工作日(周一至周五)数据

    MySQL实现优雅统计工作日(周一至周五)数据

    在实际业务中,我们常常需要统计工作日(周一至周五) 的访问量、订单量或用户活跃度,而剔除周末数据,本文将从基础方法到高级优化,系统讲解如何高效统计工作日数据,并提供生产级建议,有需要的可以了解下
    2026-05-05
  • mysql存储过程 在动态SQL内获取返回值的方法详解

    mysql存储过程 在动态SQL内获取返回值的方法详解

    本篇文章是对mysql存储过程在动态SQL内获取返回值进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • MSSQL产生死锁的根本原因及解决方法

    MSSQL产生死锁的根本原因及解决方法

    死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等的进程称为死锁进程
    2016-04-04
  • mysql8.0 .ibd文件恢复表结构的实现

    mysql8.0 .ibd文件恢复表结构的实现

    本文主要介绍了mysql8.0 .ibd文件恢复表结构的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-10-10
  • MySQL学习第四天 Windows 64位系统下使用MySQL

    MySQL学习第四天 Windows 64位系统下使用MySQL

    MySQL学习第四天教大家如何在Windows 64位下使用MySQL,即使用命令行方式完成操作MySQL服务,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • mysql中将null值转换为0的语句

    mysql中将null值转换为0的语句

    mysql中将null值转换为0的语句,在mysql数据库开发中,如果后期添加了字段那么这些值为空值null,我们在使用者需要将null转换为0方便后期的控制就需要下面的代码了。
    2011-02-02
  • Mysql 数据库结构及索引类型

    Mysql 数据库结构及索引类型

    这篇文章主要介绍了Mysql 数据库结构及索引类型,数据库索引是 mysql 数据库中重要的组成部分,是数据库查询数据速度提升的关键,本文将介绍数据库索引的一些内容,下文更多相关内容,需要的小伙伴可以参考一下
    2022-05-05

最新评论