MySQL正则表达式替换

3

以下是我的情况:

我的公司为客户托管多个网站,并且网站的内容存储在MySQL数据库中。

我有一个问题,需要查看整个数据库并替换内容的部分。例如:

我需要将http://downloads.mysever.com/siteID/someImage.jpg替换为//downloads.mysever.com/siteID/someImage.jpg

所以我只需要从所有链接中删除指向我们下载服务器的http:

我的问题是,最好的方法是什么?我需要编写一个处理此事的php脚本,还是能够使用MySQL来完成此操作。

谢谢


没有一种“最好的方法”来完成如此微不足道的事情。使用你最熟悉的工具即可。 - user229044
1
UPDATE table SET col = SUBSTR(col, 6) - DaveRandom
@noub你为什么需要一个正则表达式呢?你只是要去掉前5个字符。最坏的情况下,只需用空字符串查找/替换“http:”,这仍然不需要使用正则表达式。 - DaveRandom
所以只需执行 UPDATE table SET col = REPLACE(col, 'http:', '') 即可。 - DaveRandom
1
正则表达式并不是解决与字符串相关的每个问题的最佳解决方案,也不是魔法棒。 - Andy Lester
显示剩余2条评论
5个回答

2

您可以使用SQL语句

 UPDATE tablename SET url = REPLACE(url, 'http:', '');

阅读这篇博客文章

您可以使用命令行执行此命令

mysql -uUSERNAME -p DATABASE_NAME -e "UPDATE tablename SET url = REPLACE(url, 'http:', '')";

2
您可以使用纯MySQL实现此操作:
update table set field = REPLACE(field, 'http:', '') where INSTR(field, 'http:') > 0;

请查看这个问题

1
请注意,WHERE条件不是必需的。 - hek2mgl

0

MySQL确实提供了正则表达式功能。这个功能可能太详细了,无法在此进行介绍,因此在这里提供链接:

http://dev.mysql.com/doc/refman/5.5/en/regexp.html

一个针对你的示例案例的基本使用示例是:
UPDATE table SET field = REPLACE(field, 'http:', '') WHERE field REGEXP '^http:'

请注意,可以通过简单地执行以下操作而无需使用正则表达式来完成此案例:
UPDATE table SET field = REPLACE(field, 'http:', '') WHERE field LIKE 'http:%'

因此,您可能不需要针对每种替换类型使用正则表达式。


0

要从表中所有行的字符类型列中删除前导字符串'http:',则可以使用如下简单的方法:

UPDATE mytable
   SET mycol = SUBSTRING(mycol,6)
 WHERE mycol LIKE 'http:%'

更新:

请注意,使用REPLACE函数将替换字符串中指定字符串的所有出现;这可能不适用于仅删除指定字符串的前导出现。

如果您想要删除列值中找到的所有'http:'出现,则:

UPDATE mytable
   SET mycol = REPLACE( mycol , 'http:, '')
 WHERE mycol LIKE '%http:%'

MySQL确实提供了对正则表达式的支持,具体来说,可以使用正则表达式查找与给定正则表达式匹配的值;但是MySQL不支持使用正则表达式进行“替换”。

因此,您可以在查询中使用这个功能:

 WHERE mycol REGEXP 'http:'

等同于:

 WHERE mycol LIKE '%http:%'

0

如果您可以短暂地将数据库离线,我发现最简单的方法是:

  1. 使用mysqldump导出整个数据库
  2. 在您喜欢的任何编辑器中运行查找和替换以更新数据库转储
  3. 从转储文件重新创建数据库-确保所有内容都正确,然后用新版本替换原始数据库。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接