MySQL在里面找到/替换一个唯一的字符串

时间:2014-05-03 14:58:36

标签: mysql phpmyadmin

不知道我会在多大程度上解决这个问题,但是我正在通过一个数据库删除某些零碎的东西,以准备转换为不同的软件。

我正在努力使用目前看起来像

的网站上的图片代码

[img:<string>]<image url>[/img:<string>]

这些字符串位于另一个名为bbcode_uid

的字段中

到目前为止,我正在运行的查询是

UPDATE phpbb_posts SET post_text = REPLACE(post_text, '[img:]', '');

所以我的实际问题是,是否有任何方法可以从该SQL查询中的bbcode_uid中提取每个字符串,这样我就不必再运行相同的命令10,000次,每次都更改唯一的字符串。

或者,我可以在[img:]中包含一些内容,以包含接下来的8个字符,无论它们是什么,因为这是所使用的字符串的长度。

希望能节省时间,否则我可能不得不考虑另一种方法。

根据要求。

我想要替换的文字是

[img:1nynnywx]http://i.imgur.com/Tgfrd3x.jpg[/img:1nynnywx]

我想结束只是

http://i.imgur.com/Tgfrd3x.jpg

只需删除URL周围的代码,但每个post_text都有一个不同的字符串,该字符串包含在bbcode_uid中。

2 个答案:

答案 0 :(得分:0)

您可以使用substring_index()执行此操作。

以下内容适用于您的示例:

select substring_index(substring_index(post_text, '[/img:', 1), ']', -1)

答案 1 :(得分:0)

方法1

LIB_MYSQLUDF_PREG

如果您想在数据库中使用更多正则表达式,可以考虑使用LIB_MYSQLUDF_PREG。这是一个导入PCRE库的MySQL用户函数的开源库。 LIB_MYSQLUDF_PREG仅以源代码形式提供。要使用它,您需要能够编译它并将其安装到MySQL服务器中。安装此库不会以任何方式更改MySQL的内置正则表达式支持。它只是提供以下附加功能:

PREG_CAPTURE从字符串中提取正则表达式匹配。 PREG_POSITION返回正则表达式与字符串匹配的位置。 PREG_REPLACE对字符串执行搜索和替换。 PREG_RLIKE测试正则表达式是否匹配字符串。

所有这些函数都将正则表达式作为其第一个参数。此正则表达式必须格式化为Perl正则表达式运算符。例如。要测试正则表达式是否与主题不敏感匹配,您将使用MySQL代码PREG_RLIKE('/ regex / i',subject)。这类似于PHP的preg函数,它还需要PHP字符串中正则表达式的额外//分隔符

你可以参考这个链接:github.com/hholzgra/mysql-udf-regexp

方法2

使用php程序,逐个获取记录,使用php preg_replace 参考:www.php.net/preg_replace

参考:http://www.online-ebooks.info/article/MySql_Regular_Expression_Replace.html