【问题标题】:Delete / replace all images in a SQL Database删除/替换 SQL 数据库中的所有图像
【发布时间】:2013-02-09 22:26:37
【问题描述】:

我有一个包含 400k 帖子的 mysql 数据库。在 arround 100k 帖子中是图像。示例:

text text text <img src="/images/test.jpg"> text text text

必须删除完整的图像字符串&lt;img src="/images/test.jpg"&gt;。但它并不总是&lt;img src/images/test.jpg"&gt; 有很多变体。所以我不能使用典型的 sql replace 。

我需要的是“两个字符之间的 sql 替换”。对我来说,删除/替换 "&lt;img" and "&gt;" 之间的所有内容,当然不包括 &lt;img and &gt;

这可能吗? 谢谢

【问题讨论】:

  • 数据库部分不是重要部分。您真正在谈论的是解析 HTML。查看htmlparsing.com 的想法。仅使用 SQL 是无法做到这一点的。
  • 非常感谢您的快速回复。 100k 条目很多。我需要从数据库中删除这些图像。我知道我可以在它们显示之前用 php 替换它们,但对我来说,最好直接删除数据库中的图像。我尝试使用类似 stackoverflow.com/questions/8850798/sql-replace-all-characters-between-two-strings 但没有成功。谢谢你的帮助。
  • 添加了正则表达式标签以扩大受众范围。我相信答案就在那里。
  • 我不明白你的问题。这些图片在数据库中吗?您只是想从 HTML 中删除标签还是也想删除图片?你需要对数据库做什么?

标签: mysql sql regex html-parsing


【解决方案1】:

MySQL 支持正则表达式:

UPDATE Mytable SET url = '' WHERE url RLIKE someregex;

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

类似:

UPDATE Mytable SET url = '' WHERE url RLIKE '\\<img.\\>'

但请注意 MySQL 不支持输出正则表达式损坏的字符串。它只会比较。

不过,有一个 MySQL 用户函数 REGEX_REPLACE,见:https://launchpad.net/mysql-udf-regexp
另请参阅此问题:How to count words in MySQL / regular expression replacer?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多