对于 MySQL 8+, 用
REGEXP_REPLACE()
函数
对于 MySQL 5 及以前版本,用用户自定义函数 (user-defined function,简称UDF),如:
mysql-udf-regexp
本文只说明 MySQL 8+ 中
REGEXP_REPLACE()
函数的用法,不对 UDF 进行说明,请自行参考 GitHub 链接。
REGEXP_REPLACE(expr, pat, repl[, pos[, occurrence[, match_type]]])
expr
是字符串,或者表的字段
pat
是正则表达式,MySQL 中的正则表达式并不是完整的的,比如数字可以用
[0-9]
,但是
\d
就不可以。
repl
是要替换成的字符串。如果要引用提取的字符串,可以用
$1
、
$2
、
$3
。
pos
正则表达式开始搜索的位置,默认是
1
,也就是起始位置。
occurrence
匹配次数。默认是
0
,匹配全部。
match_type
匹配类型。
c
:大小写敏感
i
:大小写不敏感
m
:点号
.
匹配多行。默认是到行尾部结束了。
u
:仅 Unix-like 换行符。
替换字符串:
-- 以下输出为:the quick brown dog
SELECT REGEXP_REPLACE('the quick brown fox', '(.*?)(fox)' , '$1dog' ) AS demo;
替换字段:
-- 假设原本字段内容为:100 test of regex,以下输出为:100 test
update post set title = REGEXP_REPLACE(title, '([0-9]+) test of regex', '$1 test') where id = 1;
参考资料:
12.8.2 Regular Expressions
How to do a regular expression replace in MySQL?