我在表中有一个文本列,其中包含HTML数据以及以base64编码表示的图像。
这里是一个例子:
</p><p><span lang="EN"> </span></p><p>
</p><p><img width="263" height="135" align="right" src="data:image/png;base64,/9j/4AAQSkZJRgABAQEAYABgAA...." alt=""></p>
base64
之后的字符串非常长。我要删除长字符串表示形式,并替换为“图像”一词。
我在base64,
上进行了模式匹配,然后删除了所有内容,直到"
关键字之前的alt
标记为止。它适用于仅出现base64值的情况。如果出现多次,则失败。
是否有更好的方法来解决此问题,以便仅删除以base64编码表示图像的字符串?
答案 0 :(得分:0)
也许您的问题是贪婪匹配,而解决方案是匹配"
字符以外的任何字符:
regexp_replace(col, 'base64,[^"]*', 'image')
答案 1 :(得分:0)
要使实际替换工作不止一次,您需要为regexp_replace
使用“全局”标志,例如:
=# SELECT regexp_replace(E'\n\n...height="135" align="right" src="data:image/png;base64,/9j/4AAQSkZJRgABAQEAYABgAA...." alt="" ...\n<p></p>\n<p><img align="left" src="data:image/png;base64,/9j/4AAQSkZJRgABAQEAYABgAA...." class="test" alt=""/>\n', '(data:[^,]+,)[^"]+', '\1<data>', 'g');
regexp_replace
------------------------------------------------------------------------------
+
+
...height="135" align="right" src="data:image/png;base64,<data>" alt="" ... +
<p></p> +
<p><img align="left" src="data:image/png;base64,<data>" class="test" alt=""/>+
(1 row)
...所以:regexp_replace(my_html_column, '(data:[^,]+,)[^"]+', '\1<data>', 'g')
应该匹配并替换给定文本的所有data URI。