Обратные ссылки RegEx в IntelliJ - PullRequest
       21

Обратные ссылки RegEx в IntelliJ

128 голосов
/ 14 сентября 2009

Я хочу использовать функцию поиска и замены IntelliJ для выполнения следующего преобразования:

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

Я пробовал следующее:

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

Но Intellij, похоже, не распознает \\1 и \\2 в качестве обратных ссылок. Я также пробовал одну косую черту, но это тоже не работает.

Ответы [ 4 ]

194 голосов
/ 14 сентября 2009

IntelliJ использует $1 для замены обратных ссылок.

Из справки IntelliJ:

Дополнительную информацию о регулярных выражениях и их синтаксисе см. В документации по java.util.regex Обратные ссылки должны иметь формат $ n, а не \ n.

13 голосов
/ 06 апреля 2016

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

В IntelliJ 2016 документация в приложении вводит в заблуждение. Вот лучшая цитата из полной документации:

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

Источник: Синтаксис регулярного выражения 2016.1, Советы и рекомендации

2 голосов
/ 04 апреля 2012

Содержащаяся в продукте контекстная справка для регулярных выражений в Idea 9.0 (и, возможно, в других версиях) представляется неверной. Это заявляет это:

  Back references
  \n
  Whatever the nth capturing group matched

Но, очевидно, как уже упоминалось в предыдущих ответах, и это мой опыт, это действительно \ $ n для обратных ссылок, а не \ n

Вы можете получить доступ к этой контекстной справке, щелкнув ссылку «[Помощь]» рядом с параметром «Регулярное выражение» в диалоговом окне «Заменить текст»

0 голосов
/ 15 сентября 2009

IntelliJ IDEA / Справочник / Справочник по синтаксису регулярных выражений


Соответствует подвыражению и запоминает совпадение. Если вам нужно использовать совпавшую подстроку в том же регулярном выражении, вы можете извлечь ее, используя обратную ссылку (\ num, где num = 1..n). Если вам нужно сослаться на совпавшую подстроку где-то за пределами текущего регулярного выражения (например, в другом регулярном выражении в поле «Замена»), вы можете получить его, используя знак доллара ($ num, где num = 1..n). Если вам необходимо включить символы скобок в подвыражение, используйте «(» или «)».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...