2

我有字符串
[[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]]

看起来我的正则表达式的最后 2 个符号在正则表达式[[的下一次迭代中不存在

4

1 回答 1

0

您应该使用前瞻而不是组:

select regexp_replace('[[good|12345]] [[bad1 [[bad2 [[bad3 [[bad4 [[bad5 [[good|12345]]', '\[\[([^\|]+?(?=\[\[|\Z))', '\1', 'g')

请参阅演示 SQL 小提琴

在此处输入图像描述

前瞻(?=\[\[|\Z)检查的存在[[,但不消耗字符(即匹配并继续遍历字符串)。因此,以下内容[[仍可用于下一场比赛。

于 2015-08-25T14:00:21.633 回答