我有字符串
[[good|12345]] [[bad1 [[bad2 [[bad3 [[bad4 [[bad5 [[good|12345]]
如果单词后面没有|
,我需要杀死[[
。
我的工作:
select regexp_replace('[[good|12345]] [[bad1 [[bad2 [[bad3 [[bad4 [[bad5 [[good|12345]]',
'\[\[([^\|]+?(\[\[|\Z))', '\1', 'g')
我得到的:
[[good|12345]] bad1 [[bad2 bad3 [[bad4 bad5 [[good|12345]]
我想得到的:
[[good|12345]] bad1 bad2 bad3 bad4 bad5 [[good|12345]]
看起来我的正则表达式 [[
的最后两个符号在正则表达式的下一次迭代中不存在
最佳答案
您应该使用前瞻而不是组:
select regexp_replace('[[good|12345]] [[bad1 [[bad2 [[bad3 [[bad4 [[bad5 [[good|12345]]', '\[\[([^\|]+?(?=\[\[|\Z))', '\1', 'g')
(?=\[\[|\Z)
仅向前看检查 [[
的存在,但不消费字符(即匹配并继续遍历字符串)。因此,以下 [[
仍可用于下一场比赛。
关于sql - Postgresql regexp_replace 'g' 标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32205240/