Mysql替换正则表达式

时间:2010-08-13 12:49:00

标签: mysql regex replace

嗨有没有办法在mysql表中用其他东西“替换”10次或更多次_(下划线)的出现。

背景 我继承了为网络编写的内容数据库。

不幸的是,原始作者使用________________代替<hr />作为横向规则。

这是一个wordpress安装,因此内容位于名为wp_posts的表中。

我能够找到以下查询所涉及的帖子。

SELECT *
FROM `wp_posts`
WHERE `post_content` LIKE '%\_\_\_\_\_\_\_\_\_\_%'

更新:

我也可以使用以下内容找到匹配的帖子

SELECT `post_content`
REGEXP '_{10,}'
FROM `wp_posts`
WHERE `post_content` LIKE '%\_\_\_\_\_\_\_\_\_\_%'
LIMIT 0 , 30

然而,如果没有匹配则只返回1,如果不匹配则返回0.

有什么办法可以返回匹配的子字符串吗? 有没有办法让表达贪婪?

1 个答案:

答案 0 :(得分:4)

MySQL没有正则表达式替换,但如果没有它,你可以做你想做的事。

您可以使用REPLACE替换完整的字符串:

update `wp_posts` set `post_content` = replace(`post_content`,'__________','<hr />');

由于这是一次性工作,我首先找到用于表示_的{​​{1}}的最高计数 - 如果是15,我首先运行该SQL命令,字符串为15 <hr /> s,然后是14,然后是13,然后是...,然后是10。