Я ищу сделать замену поиска регулярными выражениями в Sublime Text 2. Документация на этом довольно анемична. В частности, я хочу сделать замену на группах, поэтому что-то вроде преобразования этого текста:
Hello my name is bob
И этот термин поиска:
Найти что: my name is (\w)+
Заменить на: my name used to be $(1)
Поисковый запрос работает просто отлично, но я не могу найти способ сделать замену, используя группу regexp.
Обычно обратная ссылка является либо $1
, либо \1
(обратная косая черта) для первой группы захвата (первое совпадение шаблона в круглых скобках). Поэтому, возможно, попробуйте:
my name used to be \1
или
my name used to be $1
UPDATE: Как уже отмечалось несколькими людьми, ваш первоначальный шаблон захвата неверен и будет содержать только окончательную букву имени, а не целое имя. Вы должны использовать следующий шаблон для захвата всех букв имени:
my name is (\w+)
Кстати, в вопросе выше:
Для:
Hello, my name is bob
Найти часть:
my name is (\w)+
С заменой части:
my name used to be \1
Вернется:
Hello, my name used to be b
Изменить часть поиска на:
my name is (\w+)
И заменить будет то, что вы ожидаете:
Hello, my name used to be bob
Пока (\ w) + будет соответствовать "bob", это не группировка, которую вы хотите заменить.
Используйте() круглые скобки в строке поиска
Важно подчеркнуть! Все сопоставленные сегменты в строке поиска, которые вы хотите использовать в заменяющей строке, должны быть охвачены скобками(), в противном случае эти согласованные сегменты не будут доступны с такими переменными, как $1, $2,... и \1,\2,.. и т.д.
Пример:
Мы хотим заменить 'em' на 'px', но сохраним числовые значения:
margin: 10em
margin: 2em
Таким образом, мы используем margin: $1px
как заменяющую строку.
ПРАВИЛЬНО: Объявите желаемый сегмент $1
в скобках ( )
следующим образом:
НАЙТИ: margin: ([0-9]*)em
(С круглыми скобками)
ЗАМЕНИТЕ: margin: $1px
РЕЗУЛЬТАТ:
margin: 10px
margin: 2px
НЕПРАВИЛЬНО: Следующий шаблон регулярного выражения будет соответствовать желаемым строкам, но совпадающие сегменты не будут доступны в замененной строке в качестве таких переменных, как $1
:
НАЙТИ: margin: [0-9]*em
(Без круглых скобок)
ЗАМЕНИТЕ: margin: $1px
РЕЗУЛЬТАТ: ($1
- undefined)
margin: px
margin: px
Вот визуальная презентация одобренного ответа.
Обратите внимание, что если вы используете более 9 групп захвата, вы должны использовать синтаксис ${10}
.
$10
или \10
или \{10}
работают не.
$0
?