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 に答える