Как получить доступ к совпавшим объектам для замены при использовании режима регулярных выражений в PL/SQL Developer Find & replace?
Вопрос
У меня есть запрос, в котором я хочу заменить
avg(j2)
с
avg(case when j2 <> 0 then j2 else 0 end)
Выше приведен конкретный пример, но шаблон одинаков для всех замен.Это всегда слово, за которым следует число, которое необходимо заменить оператором case, который проверяет, не равно ли число 0.
Я попробовал следующее для поиска:
avg(\(\w\d\))
и находка работает.Теперь я хочу сделать замену, поэтому попробую:
avg(case when \1 <> 0 then \1 else 0 end)
но он помещает буквальный \1, а не захваченный текст из совпадения.Я пытался \\1
& $1
а также, и это воспринимает их все буквально.Может ли кто-нибудь сказать мне, каков правильный синтаксис для использования захваченного текста для замены?Это поддерживается?
Спасибо,
Ашиш
Решение
Я не уверен, поддерживает ли IDE Developer PL/SQL захват группы.Однако последние версии, похоже, поддерживают поиск и замену на основе регулярных выражений.Не могу найти источник, подтверждающий, работает ли групповой захват.Почему бы вам не попробовать вставить код в что-нибудь вроде Notepad++ и использовать то же регулярное выражение.Он должен работать.Вы можете вставить результат обратно в свою IDE и продолжить оттуда...
Другие советы
Вы можете заменить его, используя $ и номер типа,$0 или $1 и т. д.см. пример ниже
find: TABLE (.*\..*) IS
replace: COLUMN $1 IS