Ответ 1
IntelliJ использует $1
для замены обратных ссылок.
Из справки IntelliJ:
Дополнительные сведения о регулярных выражениях и их синтаксисе см. в документации для java.util.regex Обратные ссылки должны иметь $n, а не \n.
Я хочу использовать функцию IntelliJ find-and-replace для выполнения следующего преобразования:
// Replace this
model.put('foo', 'bar')
// With this
model['foo'] = bar
Я пробовал следующее:
Текст для поиска: model.put\((.*),(.*)\)
Заменить на: model\[\\1\] = \\2
Но Intellij, кажется, не распознает \\1
и \\2
как обратные ссылки. Я также пробовал одну косую черту, но это тоже не работает.
Спасибо, Дон
IntelliJ использует $1
для замены обратных ссылок.
Из справки IntelliJ:
Дополнительные сведения о регулярных выражениях и их синтаксисе см. в документации для java.util.regex Обратные ссылки должны иметь $n, а не \n.
Короче говоря, вы должны использовать $1
для $n
для замены обратных ссылок. Синтаксис \1
предназначен только для обратных ссылок в рамках поиска.
В IntelliJ 2016 документация в приложении вводит в заблуждение. Вот лучшая цитата из полного документа:
Если вам нужно отнести соответствие подстроки где-то вне текущего регулярного выражения (например, в другом регулярном выражении в качестве строки замены), вы можете получить ее с помощью знака доллара ($ num, где num = 1..n).
Источник: 2016.1 синтаксис регулярных выражений, советы и рекомендации
IntelliJ IDEA/Ссылка/Ссылка на синтаксис регулярного выражения
Соответствует подвыражению и запоминает совпадение. Если вам нужно использовать подобранную подстроку в одном и том же регулярном выражении, вы можете получить ее с помощью backreference (\num, где num = 1..n). Если вам нужно передать согласованную подстроку где-то вне текущего регулярного выражения (например, в другом регулярном выражении в поле "Замена" ), вы можете получить ее с помощью знака доллара ($ num, где num = 1..n). Если вам нужно включить символы скобок в подвыражение, используйте "(" или ")".
Контекстная справка для регулярных выражений в продукте Idea 9.0 (и, возможно, другие версии) выглядит некорректной. В нем говорится следующее:
Back references \n Whatever the nth capturing group matched
Но, по-видимому, как упоминалось в предыдущих ответах, и это мой опыт, он действительно \$n для обратных ссылок, а не \n
Вы получите эту контекстуальную справку, щелкнув ссылку "[Справка]" рядом с параметром "Регулярное выражение" в диалоговом окне "Заменить текст"