У меня есть строка
[[good|12345]] [[bad1 [[bad2 [[bad3 [[bad4 [[bad5 [[good|12345]]
PostGreSQL regexp_replace 'г' флаг
мне нужно убить [[
если слово нету |
после него.
, что я делаю: 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 символа моего регулярного выражения [[
не делает существует в следующей итерации regexp
Спасибо за ответ ур, должен ли я установить '? =' Каждому члену группы? Будет ли разница между '(? = A | b)' и '(? = A |? = B)' –
Отрицательный lookahead '(? = \ [\ [| \ Z)' проверяет, есть ли [[[ 'или конец строки. Если вы напишете '(? = A |? = B)', вы получите ошибку, так как переменный оператор '|' не может быть количественно определен (не может быть 1 или более операций чередования в 1 единственном месте в строке). Если вы пишете '(? = A) (? = B)' выражение никогда не будет соответствовать 1, и тот же символ в данной позиции не может быть 'a' и' b' в одно и то же время (обратные действия выполняют проверку без потребления текст, они делают это, все еще находясь в том же месте, где вступает в игру. –
спасибо человеку, это помогает –