首页/数据/SQL 速查/REGEXP_REPLACE 正则替换
本包目录(311 条)
查询基础33 条连接与子查询40 条聚合与窗口函数54 条
函数速查60 条
变更与事务52 条性能与执行计划72 条

REGEXP_REPLACE 正则替换

用正则做替换:批量清洗手机号、脱敏、格式规整;两库的默认替换次数与捕获组写法不同,跨库改写要逐条核对。

SQL 速查数据更新于 2026-10-12

MySQL

MySQL
-- 默认替换全部出现位置;match_type 传 'i' 忽略大小写
SELECT REGEXP_REPLACE('13800001111', '(\d{3})\d{4}(\d{4})', '$1****$2');
-- '138****1111'
SELECT REGEXP_REPLACE('aXbXc', 'x', '-', 1, 0, 'i');  -- 'a-b-c'

PostgreSQL

PostgreSQL
-- 默认只替换第 1 处,需要 'g' 才全部替换;捕获组用 \1
SELECT regexp_replace('13800001111', '(\d{3})\d{4}(\d{4})', '\1****\2');
SELECT regexp_replace('aXbXc', 'x', '-', 'gi');
默认次数MySQL 替换全部;PostgreSQL 只替换首处(加 'g')
捕获组引用MySQL 用 $1;PostgreSQL 用 \1
引擎MySQL 8 用 ICU 正则;PostgreSQL 用 ARE 正则,语法细节有差异

易错点

  • MySQL 字符串里写 \d 需要写成 '\\d'(反斜杠转义),少写一层会匹配失败
  • PostgreSQL 忘记 'g' 标志只替首处,批量清洗时结果看似部分生效,排查半天

数据来源与参考

  • MySQL 8.0 Reference Manual · Regular Expressions
  • PostgreSQL Documentation · Regular Expression Functions
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌