Postgresql regexp_replace 'g' 标志
Postgresql regexp_replace 'g' flag
我有字符串
[[good|12345]] [[bad1 [[bad2 [[bad3 [[bad4 [[bad5 [[good|12345]]
如果后面没有 |
,我需要杀死 [[
。
我做什么:
select regexp_replace('[[good|12345]] [[bad1 [[bad2 [[bad3 [[bad4 [[bad5 [[good|12345]]',
'\[\[([^\|]+?(\[\[|\Z))', '', 'g')
我得到了什么:
[[good|12345]] bad1 [[bad2 bad3 [[bad4 bad5 [[good|12345]]
我想得到什么:
[[good|12345]] bad1 bad2 bad3 bad4 bad5 [[good|12345]]
看起来我的正则表达式 [[
的最后 2 个符号在下一次正则表达式迭代中不存在
您应该使用前瞻而不是组:
select regexp_replace('[[good|12345]] [[bad1 [[bad2 [[bad3 [[bad4 [[bad5 [[good|12345]]', '\[\[([^\|]+?(?=\[\[|\Z))', '', 'g')
(?=\[\[|\Z)
仅检查 [[
的存在,但不会消耗字符(即匹配并继续通过字符串)。因此,以下 [[
仍可用于下一场比赛。
我有字符串
[[good|12345]] [[bad1 [[bad2 [[bad3 [[bad4 [[bad5 [[good|12345]]
如果后面没有 |
,我需要杀死 [[
。
我做什么:
select regexp_replace('[[good|12345]] [[bad1 [[bad2 [[bad3 [[bad4 [[bad5 [[good|12345]]',
'\[\[([^\|]+?(\[\[|\Z))', '', 'g')
我得到了什么:
[[good|12345]] bad1 [[bad2 bad3 [[bad4 bad5 [[good|12345]]
我想得到什么:
[[good|12345]] bad1 bad2 bad3 bad4 bad5 [[good|12345]]
看起来我的正则表达式 [[
的最后 2 个符号在下一次正则表达式迭代中不存在
您应该使用前瞻而不是组:
select regexp_replace('[[good|12345]] [[bad1 [[bad2 [[bad3 [[bad4 [[bad5 [[good|12345]]', '\[\[([^\|]+?(?=\[\[|\Z))', '', 'g')
(?=\[\[|\Z)
仅检查 [[
的存在,但不会消耗字符(即匹配并继续通过字符串)。因此,以下 [[
仍可用于下一场比赛。