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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Linux搭建单机MySQL8.0.26版本的操作方法

    Linux搭建单机MySQL8.0.26版本的操作方法

    这篇文章主要介绍了Linux搭建单机MySQL8.0.26版本的操作方法,本文通过图文并茂的形式给大家讲解的非常详细,感兴趣的朋友一起看看吧
    2025-05-05
  • MySQL深度分页(千万级数据量如何快速分页)

    MySQL深度分页(千万级数据量如何快速分页)

    后端开发中经常需要分页展示,个时候就需要用到MySQL的LIMIT关键字。LIMIT在数据量大的时候极可能造成的一个问题就是深度分页。本文就介绍一下解决方法,感兴趣的可以了解一下
    2021-07-07
  • MySQL中MTR的概念

    MySQL中MTR的概念

    这篇文章主要介绍了MySQL中MTR的概念,帮助大家更好的理解和使用MySQL数据库,感兴趣的朋友可以了解下
    2020-11-11
  • MySQL数据库innodb启动失败无法重启的解决方法

    MySQL数据库innodb启动失败无法重启的解决方法

    这篇文章给大家分享了MySQL数据库innodb启动失败无法重启的解决方法,通过总结自己遇到的问题分享给大家,让遇到同样问题的朋友们可以尽快解决,下面来一起看看吧。
    2016-09-09
  • MySQL系列关于NUll值的经验总结分析教程

    MySQL系列关于NUll值的经验总结分析教程

    这篇文章主要为大家介绍了MySQL系列关于NUll值的一些经验总结分析,关于null值的影响作用以及为什么会出现null值的原因等等问题的解析
    2021-10-10
  • MySQL存储过程的优化实例

    MySQL存储过程的优化实例

    在编写MySQL存储过程的过程中,我们会时不时地需要对某些存储过程进行优化,其目的是确保代码的可读性、正确性及运行性能。本文以作者实际工作为背景,介绍了对某一个MySQL存储过程优化的整个过程。
    2016-07-07
  • MySQL全文检索的实现示例

    MySQL全文检索的实现示例

    全文搜索是一种在文本字段中查找关键词的功能。在MySQL中,我们可以使用全文搜索来提高查询的效率,本文主要介绍了MySQL全文检索的实现示例,具有一定的参考价值,感兴趣的可以了解一下
    2024-04-04
  • 使用phpMyAdmin批量修改Mysql数据表前缀的方法

    使用phpMyAdmin批量修改Mysql数据表前缀的方法

    这篇文章主要介绍了使用phpMyAdmin批量修改Mysql数据表前缀的方法,需要的朋友可以参考下
    2015-09-09
  • MySql索引原理和SQL优化方式

    MySql索引原理和SQL优化方式

    索引是提升数据库查询效率的有序存储结构,包括主键索引、唯一索引、普通索引等,约束则用于数据完整性,包含主键、唯一、外键等约束,B+树是常用的索引结构,减少磁盘IO次数,索引应用场景包括where、groupby、orderby
    2024-09-09
  • MySQL详解如何优化查询条件

    MySQL详解如何优化查询条件

    我们知道从MySQL表中使用SELECT语句来查询数据,如需有条件地从表中选取数据,可将WHERE子句添加到SELECT语句中,本篇我们来看看怎样优化查询条件
    2022-05-05

最新评论