gpt4 book ai didi

sql - regexp_replace 替换文本中的每一段

转载 作者:行者123 更新时间:2023-11-29 12:58:23 24 4
gpt4 key购买 nike

我有这样的字符串:aa/ss/[img]aa/ss/dd[/img][img]aa/ss/dd[/img]aa/ss

我需要将这段 /ss/ 替换为:/WW/ 但仅当它们位于 [img] 标签之间时。结果必须是:

aa/ss/[img]aa/WW/dd[/img][img]aa/WW/dd[/img]aa/ss

我正在尝试:

select regexp_replace('aa/ss/[img]aa/ss/dd[/img][img]aa/ss/dd[/img]aa/ss', '(\[img\] .*/)ss(/.*\[\/img\])', '\1WW\2', 'g')

但这只替换了一件,而不是两件。我使用 'g' 标志但结果相同。

如何正确地做到这一点?

最佳答案

问题是运营商的“贪心”。您有重复的表达式,因此 ss 可以匹配模式一次或两次——取决于中间的 '[/img][img] 是否被算作匹配.* 或固定模式。

不幸的是,对我来说,诊断问题比解决问题更容易——我发现正则表达式中的贪婪只是令人困惑。但是,这是针对您的特定字符串的修复。它只考虑 '[' 字符:

select regexp_replace('aa/ss/[img]aa/ss/dd[/img][img]aa/ss/dd[/img]aa/ss',
'(\[img\][^[]*/)ss(/[^[]*\[\/img\])',
'\1WW\2',
'g')

关于sql - regexp_replace 替换文本中的每一段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37087892/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com