【问题标题】:Mysql replace regular expressionmysql替换正则表达式
【发布时间】:2011-03-29 11:07:12
【问题描述】:

您好,有什么方法可以将 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。

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

【问题讨论】:

  • @Dominic Rodger 您编辑的帖子有什么问题?只想知道我做错了什么,以免重蹈覆辙。
  • 没什么太严重的(有几个错别字,你需要在 <hr /> 周围加上反引号 - 它没有出现在你的原始帖子中)。周围的人倾向于编辑内容以整理它们 - 作为问题提问者/回答者,它不一定会对您产生不良影响 - 本网站是协作编辑的(请参阅常见问题解答:stackoverflow.com/faq

标签: mysql regex replace


【解决方案1】:

MySQL 没有正则表达式替换,但没有它你可以为所欲为。

您可以使用REPLACE 替换确切的字符串:

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

由于这是一次性工作,我会首先找到用于表示 &lt;hr /&gt;_s 的最高计数 - 如果是 15,我将首先使用字符串运行该 SQL 命令15 _s,然后是 14,然后是 13,然后是...,然后是 10。

【讨论】:

  • 好吧,这很有用,但我担心原始作者只是将按钮按住他们认为合适的任何长度。我也许可以使用正则表达式来找到那些长度并将其传递给它。我会试试看的。
  • 如果使用正则表达式真的很重要,您可以将其作为插件安装在 mysql 中,请查看:mysqludf.org/lib_mysqludf_preg
  • 好吧,这对我有用。但是我必须再次完成这项工作,我希望看到更清洁的解决方案
  • 接受“MySQL 没有正则表达式替换”的答案,这最终是正确的,可能对大多数人有所帮助。
猜你喜欢
  • 1970-01-01
  • 2011-03-10
  • 2012-12-07
  • 1970-01-01
  • 2012-10-15
  • 2019-01-24
  • 2015-01-24
  • 1970-01-01
相关资源
最近更新 更多