MySQL中【正则表达式】用法

MySQL 中正则表达式 通过 REGEXP 或 RLIKE 操作符实现(两者等价),用于在 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。

相关推荐
wespaul36 分钟前
VeapAI 自然语言操作实战|第 05 篇:向量与召回——从知识条目到可检索资产
大数据·数据库·人工智能·milvus
一只鹿鹿鹿6 小时前
政务外网整体设计方案(PPT)
大数据·数据库·web安全·系统安全·流程图·政务
2603_965148116 小时前
社区与学习资源:从入门到精通的API选品学习路径
数据库·人工智能·python·学习·数据挖掘
for_ever_love__6 小时前
MySQL ORDER BY 排序优化:从 Using filesort 到索引有序扫描(含双路 / 单路排序原理)
java·mysql·优化·存储·by·order·filesort
AI砖家6 小时前
安全进入 Agent Loop:2027 年 Coding Agent 的决胜点
数据库·安全·codex·vibecoding
wangqiaowq6 小时前
SQL server C盘空间占满的处理
数据库·sql
文人sec7 小时前
SQL基础入门笔记 | 从零基础到掌握核心查询语句
数据库·笔记·sql
数字新视界7 小时前
机房动环监控提升运维效率
大数据·服务器·数据库·动环监控系统·动力与环境监控系统
SelectDB技术团队7 小时前
冷热分层从建到验:Storage Policy 创建、表级与分区级绑定、SHOW TABLETS 验证的完整命令
大数据·数据库·elasticsearch·搜索引擎·数据分析·apache doris·冷热分层
lambo mercy9 小时前
Day3:结构化输出
java·数据库·oracle