我试图修复postgres数据库中的错误数据,其中照片标记被追加两次。
The trip is wonderful.<photo=2-1-1601981-7-1.jpg><photo=2-1-1601981-5-2.jpg>We enjoyed it very much.<photo=2-1-1601981-5-2.jpg><photo=2-1-1601981-7-1.jpg>
正如您在字符串中看到的那样,已添加了照片标记,但它们又被添加到文本中。我想删除第二次出现:。第一次出现有一定的顺序,我想保留它们。
我编写了一个可以构造正则表达式模式的函数:
CREATE OR REPLACE FUNCTION dd_trip_photo_tags(tagId int) RETURNS text
LANGUAGE sql IMMUTABLE
AS $$
SELECT string_agg(concat('<photo=',media_name,'>.*?(<photo=',media_name,'>)'),'|') FROM t_ddtrip_media WHERE tag_id=tagId $$;
这会捕获某个照片标记的第二次出现。 然后,我使用regex_replace替换第二次出现: 更新t_ddtrip_content set content = regexp_replace(content,dd_trip_photo_tags(332761),'')来自t_ddtrip_content,其中tag_id = 332761;
然而,它会删除所有匹配的标签。我在网上查了好几天但仍无法找到解决这个问题的方法。感谢任何帮助。
答案 0 :(得分:1)
这应该有效。
正则表达式1:
<photo=.+?>
请参阅:https://regex101.com/r/thHmlq/1
正则表达式2:
<.+?>
请参阅:https://regex101.com/r/thHmlq/2
输入:
The trip is wonderful.<photo=2-1-1601981-7-1.jpg><photo=2-1-1601981-5-2.jpg>We enjoyed it very much.<photo=2-1-1601981-5-2.jpg><photo=2-1-1601981-7-1.jpg>
输出:
<photo=2-1-1601981-7-1.jpg>
<photo=2-1-1601981-5-2.jpg>
<photo=2-1-1601981-5-2.jpg>
<photo=2-1-1601981-7-1.jpg>