开发者社区 问答 正文

问个 mysql 数据替换的正规则。哪位朋友帮我看看下面 mysql 正规则有什么问题? 谢谢

数据库里有一些下面格式的图片:
<p><img alt="文字" title="文字" src="http://pic.baidu.com/image/32778.jpg"></p>

这图片地址里只有http://pic.baidu.com/是不变的其它都是变的

也有一些的图片

<p><img alt="文字" title="文字" src="http://pic.google.com/image/32778.jpg"></p>

现在只想把全部的 带 http://pic.baidu.com 这个网址的图片替换掉,也就是清除了。

在 mysql5.7版本的 数据库里 ,怎么写正规则能完成这个 或者 有什么好的方法吗?

update bodytext set body=replace(body, "<p><img alt=".*" title=".*" src="http://pic.baidu.com.*"></p>", "");

上面是我写的。不成功。

请哪位熟悉 mysql 的朋友帮我看看怎么改? 或者有什么好的办法把 <p><img alt="文字" title="文字" src="http://pic.baidu.com/image/32778.jpg"></p> 这类图片全部替换成空 谢谢。

我的mysql 是5.7版本的

展开
收起
iuucc 2020-09-14 11:39:43 524 分享
分享
版权
举报
阿里云 AI 助理回答

在MySQL中,你可以使用REPLACE()函数来替换字符串中的特定内容。但是,由于你的图片URL可能有多种变化,而你希望替换所有以http://pic.baidu.com开头的图片链接,这需要更复杂的正则表达式匹配,而MySQL的REPLACE()函数并不直接支持正则表达式。

不过,对于你的需求,可以尝试编写一个SQL查询来尽可能地匹配并替换这类URL。虽然不能完美利用正则表达式(因为MySQL的标准REPLACE不支持),但可以通过一些字符串函数组合来近似实现。以下是一个尝试性的解决方案:

UPDATE bodytext
SET body = REPLACE(
    REPLACE(
        REPLACE(body, 'http://pic.baidu.com/', ''),
        'https://pic.baidu.com/', ''
    ),
    CONCAT(' ', 'http://pic.baidu.com/'), ' ') 
WHERE body LIKE '%http://pic.baidu.com/%' OR body LIKE '%https://pic.baidu.com/%';

这个查询做了几件事: 1. 分别尝试替换以http://pic.baidu.com/https://pic.baidu.com/开头的字符串为空字符串。 2. 为了处理可能图片URL后面紧跟空格的情况,还特别处理了这种格式,用CONCAT(' ', 'http://pic.baidu.com/')来查找并替换。 3. 使用WHERE子句确保只有包含这些URL模式的记录才会被更新,以减少不必要的处理。

请注意,这个方法不是完美的,特别是当图片URL中存在额外的变体或格式时,可能无法全部覆盖。如果你的数据库表中图片URL格式非常多样且复杂,可能需要考虑在应用程序层面进行更精细的处理,或者导出数据到支持正则表达式替换的工具或语言(如Python、Perl等)中处理后再导入回数据库。

另外,如果MySQL版本支持,可以考虑使用MySQL的REGEXP_REPLACE()函数(从MySQL 8.0.4开始提供),它可以直接使用正则表达式进行替换,会更加灵活和准确。但根据你的描述,你使用的是5.7版本,所以这里没有采用这种方法。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等