MySQL中正则表达式用法示例详解

 更新时间:2025年06月11日 09:41:48   作者:岁忧  
MySQL 中正则表达式通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配,这篇文章主要介绍了MySQL中正则表达式用法,需要的朋友可以参考下

MySQL正则表达式通过 REGEXPRLIKE 操作符实现(两者等价),用于在 WHERE 子句中进行复杂的字符串模式匹配。以下是核心用法和示例:

一、基础语法

SELECT column_name 
FROM table_name 
WHERE column_name REGEXP 'pattern';
-- 或
WHERE column_name RLIKE 'pattern';

二、常用元字符

元字符说明示例
^匹配开头'^a' → 以 “a” 开头
$匹配结尾'z$' → 以 “z” 结尾
.匹配任意单个字符'a.c' → “abc”, “axc”
[...]字符集合'[aeiou]' → 匹配任一元音
[^...]排除字符集合'[^0-9]' → 非数字字符
*前一个字符0次或多次'ab*c' → “ac”, “abbc”
+前一个字符1次或多次'ab+c' → “abc”, “abbc” (排除"ac")
{n}前一个字符n次'a{3}' → “aaa”
|或操作'cat|dog' → “cat” 或 “dog”

三、实际示例

匹配以数字开头的字符串

SELECT name FROM products WHERE name REGEXP '^[0-9]';

匹配包含特定单词的文本

SELECT content FROM logs WHERE content REGEXP 'error|warning';

匹配邮箱格式

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

匹配连续重复字符

SELECT word FROM dictionary WHERE word REGEXP '(.)\\1'; -- 如 "book"('oo')

四、与 LIKE 的区别

特性REGEXPLIKE
功能复杂模式匹配简单通配符 (%_)
大小写敏感默认不敏感(除非二进制字符串)依赖字段排序规则
性能通常较慢(全表扫描)可能使用索引

五、进阶函数(MySQL 8.0+)

REGEXP_REPLACE()
替换匹配的字符串:

SELECT REGEXP_REPLACE('hello 123', '[0-9]+', 'world'); -- 结果: 'hello world'

REGEXP_SUBSTR()
提取匹配的子串:

SELECT REGEXP_SUBSTR('abc def ghi', '[a-z]+'); -- 结果: 'abc'

REGEXP_INSTR()
返回匹配的起始位置:

SELECT REGEXP_INSTR('abc123', '[0-9]+'); -- 结果: 4

六、注意事项

  • 转义特殊字符:使用双反斜杠 \\(如 \\+, \\.)。
  • 性能优化:避免在大型表上使用 REGEXP,优先考虑全文索引或预处理。
  • 大小写敏感:如需区分大小写,使用 BINARY 关键字:
WHERE BINARY column_name REGEXP 'Pattern';

经典案例:提取文本中的金额

SELECT 
  REGEXP_SUBSTR(description, '[0-9]+\\.[0-9]{2}') AS amount 
FROM orders 
WHERE description REGEXP '[0-9]+\\.[0-9]{2}';

匹配如 "Price: 99.99 USD" 中的 99.99

到此这篇关于MySQL中正则表达式用法的文章就介绍到这了,更多相关mysql正则表达式用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL利用UNION连接2个查询排序失效详解

    MySQL利用UNION连接2个查询排序失效详解

    这篇文章主要给大家介绍了关于MySQL利用UNION连接2个查询排序失效的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-12-12
  • mysql 5.7.10 安装配置方法图文教程

    mysql 5.7.10 安装配置方法图文教程

    这篇文章主要为大家分享了mysql 5.7.10 安装配置方法图文教程,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • 详解如何修改MySQL最大连接数

    详解如何修改MySQL最大连接数

    本文主要介绍了详解如何修改MySQL最大连接数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • MySQL表字段设置默认值(图文教程及注意细节)

    MySQL表字段设置默认值(图文教程及注意细节)

    默认值的设置很重要,比如在插入的时候一些字段是可以省略的,这会带来很多的方便,接下来将要介绍MySQL表字段设置默认值感兴趣的你可以千万不要走开啊,希望本文对你有所帮助
    2013-01-01
  • MyEclipse通过JDBC连接MySQL数据库基本介绍

    MyEclipse通过JDBC连接MySQL数据库基本介绍

    MyEclipse使用Java 通过JDBC连接MySQL数据库的基本测试前提是MyEclipse已经能正常开发Java工程
    2012-11-11
  • mysql建表常用sql语句个人经验分享

    mysql建表常用sql语句个人经验分享

    熟悉一些常用的建表语句可以提升你建表的速度效率,本文整理了一些,个人感觉还不错,希望对大家有所帮助
    2014-01-01
  • Mysql数据库支持的存储引擎对比

    Mysql数据库支持的存储引擎对比

    这篇文章主要介绍了Mysql数据库支持的各个存储引擎之间的对比分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2021-09-09
  • mysql 5.7.18 Archive压缩版安装教程

    mysql 5.7.18 Archive压缩版安装教程

    这篇文章主要为大家详细介绍了mysql 5.7.18 Archive压缩版安装教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • Win7、WinXP下MySql安装出错完全卸载的方法步骤

    Win7、WinXP下MySql安装出错完全卸载的方法步骤

    这篇文章主要介绍了Win7、WinXP下MySql安装出错完全卸载的方法步骤,本文给出详细的操作步骤,按本文方法清理后,重新安装,应该就不会有错误了,需要的朋友可以参考下
    2015-06-06
  • Centos中安装多个mysql数据的配置实例

    Centos中安装多个mysql数据的配置实例

    最近因为单位项目扩充,需要在原线上数据库服务器上加装一个mysql实例(实际上就是从新编译安装一个非3306的自定义端口,不同目录的mysql),研究了一天,终于顺利搞定,这里把配置步骤发给大家,供大家学习使用
    2014-04-04

最新评论