MySQL 正则表达式替换

共 1167字,需浏览 3分钟

 ·

2022-02-23 12:42

目录
1 用法
2 示例

先说结论:

对于 MySQL 8+, 用REGEXP_REPLACE()函数
对于 MySQL 5 及以前版本,用用户自定义函数 (user-defined function,简称UDF),如:mysql-udf-regexp https://github.com/hholzgra/mysql-udf-regexp
本文只说明 MySQL 8+ 中REGEXP_REPLACE()函数的用法,不对 UDF 进行说明,请自行参考 GitHub 链接。

用法

  1. 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 换行符。

示例
替换字符串:

  1. -- 以下输出为:the quick brown dog

  2. SELECT REGEXP_REPLACE('the quick brown fox', '(.*?)(fox)' , '$1dog' ) AS demo;

替换字段:

  1. -- 假设原本字段内容为:100 test of regex,以下输出为:100 test

  2. update post set title = REGEXP_REPLACE(title, '([0-9]+) test of regex', '$1 test') where id = 1;

参考资料:
12.8.2 Regular Expressions
https://dev.mysql.com/doc/refman/8.0/en/regexp.html#function_regexp-replace
How to do a regular expression replace in MySQL?
https://stackoverflow.com/questions/986826/how-to-do-a-regular-expression-replace-in-mysql


浏览 161
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报