Я хочу использовать функцию поиска и замены IntelliJ для выполнения следующего преобразования:
// Replace this
model.put('foo', 'bar')
// With this
model['foo'] = bar
Я пробовал следующее:
Текст для поиска: model.put\((.*),(.*)\)
заменить на:model\[\\1\] = \\2
Но Intellij, похоже, не распознает \\1
и обратные ссылки \\2
. Я также пробовал одинарную косую черту, но это тоже не сработало.
java
regex
intellij-idea
Донал
источник
источник
(foo)
заменить:$1bar
'+ var +'
чтобы${var}
в некоторых строках шаблона и не мог понять, почему IntelliJ бы не закончить замену. Оказывается,$
нужно убежать в замену.Короче говоря, вы должны использовать
$1
to$n
для замены обратных ссылок.\1
синтаксис предназначен только для обратных ссылок в поиске.В IntelliJ 2016 документация внутри приложения вводит в заблуждение. Вот лучшая цитата из полной документации:
Источник: синтаксис регулярных выражений 2016.1, Советы и рекомендации
источник
Контекстная справка в продукте для регулярного выражения в Idea 9.0 (и, возможно, в других версиях) кажется неверной. В нем говорится следующее:
Но, видимо, как упоминалось в предыдущих ответах, и по моему опыту, это действительно \ $ n для обратных ссылок, а не \ n
Вы можете перейти к этой контекстной справке, щелкнув ссылку «[Справка]» рядом с переключателем «Регулярное выражение» в диалоговом окне «Заменить текст».
источник
IntelliJ IDEA / Справочник / Справочник по синтаксису регулярных выражений
Соответствует подвыражению и запоминает совпадение. Если вам нужно использовать совпадающую подстроку в одном регулярном выражении, вы можете получить ее, используя обратную ссылку (\ num, где num = 1..n). Если вам нужно сослаться на совпавшую подстроку где-то за пределами текущего регулярного выражения (например, в другом регулярном выражении в поле «Замена»), вы можете получить ее, используя знак доллара ($ num, где num = 1..n). Если вам нужно включить в подвыражение символы круглых скобок, используйте «(» или «)».
источник