【问题标题】:MySQL RegExp Replace [closed]MySQL正则表达式替换[关闭]
【发布时间】:2012-12-07 01:30:53
【问题描述】:

这是我的情况:

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

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

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

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

我的问题是最好的方法是什么?我是否需要编写一个 php 脚本来处理这个问题,或者我可以只使用 MySQL 来完成这个。

谢谢

【问题讨论】:

  • 没有“最好的方法”来做如此微不足道的事情。使用您最熟悉的任何工具。
  • UPDATE table SET col = SUBSTR(col, 6)
  • 那么这可能只使用 MySQL 吗?我不确定在 MySQL 中是否可以使用正则表达式。我更愿意编写一个能够处理它的查询,但如果需要我可以编写一个 PHP 脚本。
  • @noub 为什么需要正则表达式?你只是剥离前 5 个字符。最坏的情况是用空字符串查找/替换http:,仍然不需要正则表达式
  • 正则表达式不是魔杖,它是解决所有与字符串相关的问题的最佳解决方案。

标签: php mysql regex


【解决方案1】:

如果您能够让数据库短暂脱机,我发现最简单的方法是:

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

【讨论】:

    【解决方案2】:

    可以使用sql语句

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

    阅读this 博文

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

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

    【讨论】:

      【解决方案3】:

      你可以用纯 mysql 做到这一点:

      update table set field = REPLACE(field, 'http:', '') where INSTR(field, 'http:') > 0;
      

      this question

      【讨论】:

      • 注意WHERE条件不是必须的
      【解决方案4】:

      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:%'
      

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

      【讨论】:

        【解决方案5】:

        要删除表中所有行的前导 '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:%'
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-11-24
          • 1970-01-01
          • 1970-01-01
          • 2011-03-29
          • 2011-03-10
          • 1970-01-01
          相关资源
          最近更新 更多