mysql正则函数REGEXP

在 MySQL 中,REGEXP 是用于‌正则表达式模式匹配‌的操作符,其功能与 RLIKE 相同。从 MySQL 8.0 开始,还引入了更规范的函数形式如 REGEXP_LIKE()、REGEXP_SUBSTR()、REGEXP_REPLACE() 等,增强了正则处理能力。

  • 核心要点‌
  • 基本语法‌:

column_name REGEXP 'pattern':返回 1(匹配)或 0(不匹配)。

默认‌不区分大小写‌,但受字段排序规则(collation)影响;若需区分大小写,可使用 BINARY 或 REGEXP_LIKE(..., 'c')。

  • 支持的元字符与量词‌(基于 Henry Spencer 正则库,POSIX ERE 子集):

^、$、.、*、+、?、\[\]、|、{n}、{n,}、{n,m}

  • 不支持‌ \d、\w、\s 等 Perl 风格简写,应分别用 0-9a-zA-Z0-9\[:space:] 替代。

  • 版本差异‌:

‌MySQL 5.7 及以下‌:仅支持基本 POSIX BRE,部分语法(如 +、?)需转义或改用 {1,}、{0,1}。

‌MySQL 8.0+‌:采用 ICU 引擎,支持更多 POSIX ERE 特性,推荐使用 REGEXP_LIKE() 等函数以提高可读性和控制力。

常用函数与示例

  • ‌REGEXP_LIKE()(MySQL 8.0+)
sql 复制代码
SELECT * FROM users WHERE REGEXP_LIKE(email, '^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$', 'c');
  • REGEXP_SUBSTR()(MySQL 8.0+)‌
    提取首次匹配的子串:
sql 复制代码
SELECT REGEXP_SUBSTR('user_123_order_456', '[0-9]+', 1, 1); -- 返回 '123'
  • REGEXP_REPLACE()(MySQL 8.0+)‌
    替换匹配内容:
sql 复制代码
SELECT REGEXP_REPLACE('abc123def', '[0-9]+', ''); -- 返回 'abcdef'
  • REGEXP_INSTR()(MySQL 8.0+)‌
    返回匹配位置(从 1 开始):
sql 复制代码
SELECT REGEXP_INSTR('dog cat dog', 'dog'); -- 返回 1
SELECT REGEXP_INSTR('dog cat dog', 'dog', 2); -- 返回 9(从第2个字符开始找第二次匹配)
相关推荐
念越6 分钟前
【数据库系统概论期末复习】第四章 数据库安全性重点与常考题整理
数据库·数据库系统概论
拾贰_C37 分钟前
【mysql | windows | installation】 MySQL5.安装
数据库·windows·mysql
睡不醒男孩03082343 分钟前
达梦数据安装详细步骤(包含CLup一键部署达梦数据库实例)
数据库·达梦·clup
真实的菜44 分钟前
【无标题】Redis 从入门到精通(七):缓存设计与最佳实践 —— 穿透、击穿、雪崩与一致性终极指南
数据库·redis·缓存
念何架构之路1 小时前
存储技术Redis
数据库·redis·缓存
淘源码d1 小时前
医院专业级PACS系统完整源码(C+VC+MSSQL)
c语言·数据库·sqlserver·源码·pacs系统·医学影像系统
wu8587734571 小时前
向量数据库不是银弹:从枚举漏检到 ReACT 多轮召回的实践路径
前端·数据库·react.js
故渊at1 小时前
第一板块:Android 系统基石与运行原理 | 第二篇:Android 编译、打包与安装机制
android·系统架构·apk·打包·application·dalvik·android编译
hsg772 小时前
简述:Jensen Huang‘s Footsteps网站全内容分析
前端·javascript·数据库
yuezhilangniao2 小时前
MySQL 8.0.32 二进制安装脚本 和初始化 操作系统版本rocky86
数据库·mysql·adb