如何在MySQL中执行正则表达式替换?
我有一张约有50万行的表格;varchar(255)UTF8列filename
包含一个文件名;
我正在尝试从文件名中删除各种奇怪的字符-以为我会使用字符类: [^a-zA-Z0-9()_ .\-]
现在, MySQL中是否有一个函数可以让您通过正则表达式进行替换 ?我正在寻找与REPLACE()函数类似的功能-简化示例如下:
SELECT REPLACE('stackowerflow', 'ower', 'over');
Output: "stackoverflow"
/* does something like this exist? */
SELECT X_REG_REPLACE('Stackoverflow','/[A-Zf]/','-');
Output: "-tackover-low"
我知道REGEXP / RLIKE,但那些只检查 是否
有匹配,没有 什么 比赛是。
(我 可以 做一个“ SELECT pkey_id,filename FROM foo WHERE filename RLIKE
'[^a-zA-Z0-9()_ .\-]'
”从PHP脚本,做了preg_replace
,然后“ UPDATE foo ... WHERE
pkey_id=...
”,但看起来像一个不得已的缓慢和丑陋的黑客)
-
使用 MySQL 8.0+, 您可以使用本机
REGEXP_REPLACE
功能。REGEXP_REPLACE(expr, pat, repl[, pos[, occurrence[, match_type]]])
将字符串 expr 中与模式 pat 指定的正则表达式匹配的匹配项替换为替换字符串 repl ,并返回结果字符串。如果
expr , pat 或 repl 为NULL
,则返回值为NULL
。和正则表达式支持:
此前, MySQL的 使用的亨利斯宾塞正则表达式库来支持正则表达式运算符(
REGEXP
,RLIKE
)。使用Unicode国际组件(ICU)重新实现了对正则表达式的支持,该组件提供了完整的Unicode支持并且是多字节安全的。该
REGEXP_LIKE()
函数以REGEXP
和RLIKE
运算符的方式执行正则表达式匹配,它们现在是该函数的同义词。
此外,REGEXP_INSTR()
,REGEXP_REPLACE()
,和REGEXP_SUBSTR()
功能可用于找到匹配的位置,并执行串分别取代和提取。SELECT REGEXP_REPLACE('Stackoverflow','[A-Zf]','-',1,0,'c'); -- Output: -tackover-low
-
如何在 MySQL 中进行正则表达式替换?
2022-03-22 关注 0 浏览41 1答案
-
如何在MySQL /正则表达式替换器中计算单词数?
2021-02-02 关注 0 浏览153 1答案
-
如何在MySQL查询中进行正则表达式
2021-02-02 关注 0 浏览92 1答案
-
如何在python中使用正则表达式进行多次替换?
2021-01-29 关注 0 浏览123 1答案
-
如何在Python中调试正则表达式?
2021-01-29 关注 0 浏览76 1答案
-
Java:正则表达式替换
2021-01-30 关注 0 浏览74 1答案
-
如何在Python中测试正则表达式密码?
2021-01-29 关注 0 浏览70 1答案
-
如何在正则表达式中添加连字符
2021-02-02 关注 0 浏览128 1答案
-
如何在JavaScript中连接正则表达式文字?
2021-02-02 关注 0 浏览96 1答案
-
如何在JavaScript中反转正则表达式?
2021-02-02 关注 0 浏览128 1答案