在MYSQL中使用REGEXP替换子字符串

时间:2011-06-18 16:17:45

标签: mysql regex

在我的论坛中,我有一个BB代码来显示YouTube视频。 以下选项可用于提取youtube视频代码并使用此代码构建嵌入代码:

[youtube]http://www.youtube.com/watch?v=_OBlgSz8sSM&feature=related[/youtube]
[youtube]http://www.youtube.com/watch?v=_OBlgSz8sSM[/youtube]
[youtube]_OBlgSz8sSM[/youtube]

所有这些选项都会返回youtube视频代码__OBlgSz8sSM

升级到论坛的新版本后,前两个选项解析youtube链接无效,只有[youtube] _OBlgSz8sSM [/ youtube]的最后一个选项正常工作。

这些BB代码是论坛帖子的一部分,而不是数据库中的单独字段。

我的目标是替换所有以[youtube]开头且以[/ youtube]结尾的子字符串包含?v = with

[youtube]11 characters from ?v=[/youtube]

我正在使用MySQL 表名是POST 包含这些BB代码的字段名称是PAGETEXT

是否可以帮助我构建此更新。

1 个答案:

答案 0 :(得分:2)

编辑:以前的回答是完全错误的。

不使用正则表达式:

UPDATE POST SET PAGETEXT = REPLACE(PAGETEXT, '[youtube]http://www.youtube.com/watch?v=', '[youtube]');
UPDATE POST SET PAGETEXT = REPLACE(PAGETEXT, '[youtube]www.youtube.com/watch?v=', '[youtube]');
UPDATE POST SET PAGETEXT = REPLACE(PAGETEXT, '[youtube]youtube.com/watch?v=', '[youtube]');
UPDATE POST SET PAGETEXT = REPLACE(PAGETEXT, '&feature=related[/youtube]', '[/youtube]');

这将通过直接搜索和替换删除您不想要的数据。是否有其他模式/格式未在原始帖子中列出?

使用测试数据:

SET @test = 'test [youtube]youtube.com/watch?v=_OBlgSz8sSM&feature=related[/youtube] test';
SET @test = REPLACE(@test, '[youtube]http://www.youtube.com/watch?v=', '[youtube]');
SET @test = REPLACE(@test, '[youtube]www.youtube.com/watch?v=', '[youtube]');
SET @test = REPLACE(@test, '[youtube]youtube.com/watch?v=', '[youtube]');
SET @test = REPLACE(@test, '&feature=related[/youtube]', '[/youtube]');
SELECT @test;

mysql> SELECT @test;
+------------------------------------------+
| @test                                    |
+------------------------------------------+
| test [youtube]_OBlgSz8sSM[/youtube] test | 
+------------------------------------------+

运行这四个之后,运行

很有意思
SELECT COUNT(*) FROM POST WHERE PAGETEXT LIKE '%?v=%';

然后确保是否还有其他需要处理的内容。

始终先测试。