Как получить доступ к совпавшим объектам для замены при использовании режима регулярных выражений в PL/SQL Developer Find & replace?

StackOverflow https://stackoverflow.com/questions/1614478

  •  06-07-2019
  •  | 
  •  

Вопрос

У меня есть запрос, в котором я хочу заменить

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

http://regexr.com/3gm6c

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top