Поиск регулярных выражений заменить в Sublime Text 2

Я ищу, чтобы сделать поиск заменить регулярными выражениями в Sublime Text 2. The документация на этот скорее анемичный. В частности, я хочу сделать замену на группы, поэтому что-то вроде преобразования этого текста:

Hello my name is bob

и этот термин для поиска:

найти: my name is (w)+

заменить на: my name used to be $(1)

термин поиска работает просто отлично, но я не могу понять, как на самом деле сделать замену с помощью regexp группа.

5 ответов


обычно обратная ссылка либо или (обратная косая черта) для первой группы захвата (первое совпадение шаблона в круглых скобках). Так может попробовать:

my name used to be 

или

my name used to be 

обновление: Как указывали несколько человек, ваш исходный шаблон захвата неверен и будет захватывать только конечную букву имени, а не все имя. Вы должны использовать следующий шаблон, чтобы захватить все буквы имя:

my name is (\w+)

кстати, в вопросе выше:

для:

Hello, my name is bob

найти:

my name is (\w)+

С заменой части:

my name used to be 

вернутся:

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: px в качестве строки замены.


правильно: принять нужные соответствуют сегмента ( ) скобках следующим образом:

найти: margin: ([0-9]*)em (со скобками)

ЗАМЕНИТЬ НА: margin: px

результат:

margin: 10px
margin: 2px

неправильно: следующий шаблон регулярного выражения будет соответствовать нужные строки, но сопоставленные сегменты не будут доступны в замененной строке в качестве переменных, таких как :

найти: margin: [0-9]*em (без скобок)

ЗАМЕНИТЬ НА: margin: px

результат: ( неопределено)

margin: px
margin: px

вот визуальное представление утвержденного ответа.

enter image description here


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

или или \{10} будет не работа.