MySQL中【正则表达式】用法

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


一、基础语法

sql 复制代码
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"
` ` 或操作

三、实际示例

  1. 匹配以数字开头的字符串

    sql 复制代码
    SELECT name FROM products WHERE name REGEXP '^[0-9]';
  2. 匹配包含特定单词的文本

    sql 复制代码
    SELECT content FROM logs WHERE content REGEXP 'error|warning';
  3. 匹配邮箱格式

    sql 复制代码
    SELECT email FROM users WHERE email REGEXP '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$';
  4. 匹配连续重复字符

    sql 复制代码
    SELECT word FROM dictionary WHERE word REGEXP '(.)\\1'; -- 如 "book"('oo')

四、与 LIKE 的区别

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

五、进阶函数(MySQL 8.0+)

  1. REGEXP_REPLACE()

    替换匹配的字符串:

    sql 复制代码
    SELECT REGEXP_REPLACE('hello 123', '[0-9]+', 'world'); -- 结果: 'hello world'
  2. REGEXP_SUBSTR()

    提取匹配的子串:

    sql 复制代码
    SELECT REGEXP_SUBSTR('abc def ghi', '[a-z]+'); -- 结果: 'abc'
  3. REGEXP_INSTR()

    返回匹配的起始位置:

    sql 复制代码
    SELECT REGEXP_INSTR('abc123', '[0-9]+'); -- 结果: 4

六、注意事项

  1. 转义特殊字符 :使用双反斜杠 \\(如 \\+, \\.)。

  2. 性能优化 :避免在大型表上使用 REGEXP,优先考虑全文索引或预处理。

  3. 大小写敏感 :如需区分大小写,使用 BINARY 关键字:

    sql 复制代码
    WHERE BINARY column_name REGEXP 'Pattern';

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

sql 复制代码
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

相关推荐
岁岁种桃花儿6 小时前
MySQL从入门到精通系列:InnoDB记录存储结构
数据库·mysql
jiunian_cn7 小时前
【Redis】hash数据类型相关指令
数据库·redis·哈希算法
冉冰学姐7 小时前
SSM在线影评网站平台82ap4(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·ssm框架·在线影评平台·影片分类
Exquisite.8 小时前
企业高性能web服务器(4)
运维·服务器·前端·网络·mysql
知识分享小能手8 小时前
SQL Server 2019入门学习教程,从入门到精通,SQL Server 2019数据库的操作(2)
数据库·学习·sqlserver
踩坑小念9 小时前
秒杀场景下如何处理redis扣除状态不一致问题
数据库·redis·分布式·缓存·秒杀
萧曵 丶10 小时前
MySQL 语句书写顺序与执行顺序对比速记表
数据库·mysql
Wiktok11 小时前
MySQL的常用数据类型
数据库·mysql
曹牧11 小时前
Oracle 表闪回(Flashback Table)
数据库·oracle
J_liaty11 小时前
Redis 超详细入门教程:从零基础到实战精通
数据库·redis·缓存