首页/开发/正则与编码速查/MySQL 新正则函数的用法差异

MySQL 新正则函数的用法差异

MySQL 新版本提供判断、定位、截取与替换四类正则函数,可用匹配类型参数控制大小写、多行与换行行为,原有运算符等价于判断函数。各函数未命中时的返回值不同(假值、0、空值、原串),升级引擎后需用真实数据对照验证历史语句。

正则与编码速查开发更新于 2026-10-17
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌‌‌​‌‌​‌‌​‌​‌‌‌‌​​‌​‌‌‌​​‌‌​‌‌‌​​​‌​‌‌​‌‌​​​​‌‌‌​​​​​‌​‌‌​‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​‌‌‌​​​​​​‌​‌‌​‌​‌‌​​‌‌​​‌‌‌​‌​‌​‌‌​‌‌‌​​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

MySQL 新正则函数的用法差异

较新版本在保留原有运算符的同时,加入了一组带参数的正则函数:判断、定位、截取与替换各有对应函数,并可通过匹配类型参数控制大小写、多行与换行行为。这批函数使用新的正则引擎,语法范围与旧实现不同,升级后既有语句的匹配结果也可能变化,因此不适合与旧写法混着用而不做验证。

基本信息

函数分工判断类返回真假,定位类返回位置,截取类返回子串,替换类返回改写结果
参数结构以源值、模式为主,可追加起始位置、出现次数与匹配类型
匹配类型控制大小写敏感、多行锚点、点号是否匹配换行、行结束符处理
等价关系原有运算符等价于判断类函数

典型使用场景

  • 格式校验:判断字段是否符合约定形状,比手写多条条件更清晰
  • 抽取片段:从混杂文本中截取符合模式的子串写入新字段
  • 批量清洗:按模式替换噪声内容,例如去掉重复分隔符与多余空白
  • 定位审计:返回匹配出现的位置,用于分析字段内部结构
  • 迁移比对:对比新旧引擎下同一模式的命中差异,评估升级影响

四个函数的写法

四个函数的写法
-- 判断:等价于原有运算符,匹配类型 i 表示不区分大小写
SELECT id FROM users WHERE REGEXP_LIKE(email, '@example\\.com$', 'i');
-- 定位:返回匹配起始位置,未命中返回 0
SELECT REGEXP_INSTR(remark, '[0-9]{4}') AS pos FROM t;
-- 截取:返回匹配到的子串,未命中返回空值
SELECT REGEXP_SUBSTR(line, '[0-9]{4}-[0-9]{2}') AS ym FROM logs;
-- 替换:按模式改写,未命中时返回原串
SELECT REGEXP_REPLACE(phone, '[^0-9]', '') AS digits FROM t;
-- 多行与换行相关行为由匹配类型字符控制,组合使用需要逐个验证
SELECT REGEXP_LIKE(text, '^err', 'm') FROM logs;

函数与返回值

函数作用未命中时的返回值
判断类是否符合模式返回假值
定位类返回匹配位置返回 0
截取类返回匹配子串返回空值
替换类返回改写结果返回原字符串
运算符形式等价于判断类同上
匹配类型参数能覆盖字段排序规则带来的默认行为:需要区分大小写时显式指定,处理多行文本时按需启用多行与换行相关选项,避免依赖列定义的隐含默认值。
升级引擎后语法范围与边界行为都会变化,历史语句中的简写字符类、锚点与空模式可能得到不同结果;升级前应抽取真实数据做对照查询,确认命中集合无意外变化。

易错点

  • 把新旧写法混用而不验证:两套实现语法范围不同,同一模式在两侧命中结果不一致
  • 忽略未命中时的返回值差异:定位类返回 0、截取类返回空值,取值逻辑写错会污染数据
  • 依赖默认大小写行为:默认值由排序规则决定,换列换表后结果变化
  • 在大表上直接使用正则函数过滤:无法利用普通索引,扫描代价高
  • 替换时未处理转义层级:语句字面量与正则引擎两层解释叠加,反斜杠数量容易写错

数据来源与参考

  • MySQL 官方手册:REGEXP_LIKE、REGEXP_INSTR、REGEXP_SUBSTR 与 REGEXP_REPLACE
  • MySQL 官方手册:ICU 正则引擎的语法支持范围
  • MySQL 8.0 变更说明:正则表达式支持与匹配类型参数

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/regex/mysql8-regexp-functions.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌‌‌​‌‌​‌‌​‌​‌‌‌‌​​‌​‌‌‌​​‌‌​‌‌‌​​​‌​‌‌​‌‌​​​​‌‌‌​​​​​‌​‌‌​‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​‌‌‌​​​​​​‌​‌‌​‌​‌‌​​‌‌​​‌‌‌​‌​‌​‌‌​‌‌‌​​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​