Зворотні параметри RegEx в IntelliJ


129

Я хочу використовувати функцію пошуку та заміни IntelliJ для здійснення наступних перетворень:

// Replace this
model.put('foo', 'bar')
// With this
model['foo'] = bar

Я спробував таке:

Текст для пошуку: model.put\((.*),(.*)\) Замініть на:model\[\\1\] = \\2

Але Intellij, схоже, не розпізнає \\1і \\2як зворотній зв'язок. Я також спробував одну косу рису, але і ця не працює.

Відповіді:


196

IntelliJ використовує $1для заміни зворотних налаштувань.

З допомоги IntelliJ:

Для отримання додаткової інформації про регулярні вирази та їх синтаксис, зверніться до документації для java.util.regex Посилання на зворотній бік має мати формат $ n, а не \ n


15
Схоже , «\» не потрібно: jetbrains.com/idea/help / ... . Крім того, для мене це працює лише в тому випадку, коли я явно оточую свою групу "()", інакше пізніше я не можу посилатися на неї. Наприклад: пошук (foo)замінити:$1bar
Ghedeon

@Ghedeon: Ви, мабуть, слід додати свій коментар як відповідь або до існуючої відповіді. Ваша пропозиція ввести вираз у () - це те, що працювало для мене.
mindreader

+1 трохи інформації, яка вирішила мою пов’язану проблему: я замінюю обгортки, що містять цитати, плюс змінні навколо змінних, на кучеряві обгортки долара, тобто '+ var +'на ${var}деякі рядки шаблону, і я не міг зрозуміти, чому Intellij не завершить заміну. виявляється, $потрібно уникнути заміни.
worc

13

Коротше кажучи, ви повинні використовувати , $1щоб $nдля заміни зворотних посилань. \1синтаксис призначений лише для зворотних посилань у межах пошуку.

У IntelliJ 2016 документація в додатку вводить в оману. Ось краща цитата з повних документів:

Якщо вам потрібно вказати відповідна підрядка десь поза поточним регулярним виразом (наприклад, в іншому регулярному виразі як рядок заміни), ви можете отримати її за допомогою знака долара ($ num, де num = 1..n).

Джерело: синтаксис регулярного вираження 2016.1, поради та підказки


2

Контекстна допомога для продукту для регулярного виразів у Idea 9.0 (та, можливо, інших версіях) здається невірною. У ньому зазначено:

  Зворотні посилання
  \ n
  Що б не відповідала п’ята група захоплення

Але, мабуть, як уже згадувалося в попередніх відповідях, і це мій досвід, це насправді \ $ n для зворотних посилань, а не \ n

Ви можете отримати цю контекстну допомогу, натиснувши посилання "[Допомога] поруч із опцією радіо" Регулярний вираз "у діалоговому вікні" Замінити текст ".


0

IntelliJ IDEA / Довідка / Посилання на синтаксис регулярних виразів


Збігається на субэкспресію і запам'ятовує матч. Якщо вам потрібно використовувати відповідна підрядка в одному і тому ж регулярному виразі, ви можете отримати її за допомогою зворотної референції (\ num, де num = 1..n). Якщо вам потрібно направити відповідну підрядку десь поза поточним регулярним виразом (наприклад, в іншому регулярному виразі в полі Заміна), ви можете отримати її за допомогою знака долара ($ num, де num = 1..n). Якщо вам потрібно включити символи в круглих дужках до піддепресії, використовуйте "(" або ")".


Я знайшов тут те саме ; однак я в кінцевому рахунку мав успіх, використовуючи $ 1, без зворотної косої риски
Джо Трикаріко
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.