Chcę, aby wyszukiwanie zastąpiło wyrażenia regularne w Sublime Text 2. Dokumentacja na ten temat jest raczej anemiczna. W szczególności chcę zastąpić grupy, więc coś w stylu konwersji tego tekstu:
Hello my name is bob
I to wyszukiwane hasło:
Znajdź co: my name is (\w)+
Zamienić: my name used to be $(1)
Wyszukiwane hasło działa dobrze, ale nie mogę znaleźć sposobu, aby faktycznie zastąpić go za pomocą grupy wyrażeń regularnych.
źródło
$0
?\0
jest równe null znak i\0ddd
jest używane jako ucieczka dla znaku o punkcie kodowym ddd). Jednak$0
wydaje się być używany w Sublime2 jako „znak wyjścia” zgodnie z tą stroną (chociaż mam problem ze znalezieniem wystarczającej liczby przykładów, aby dokładnie ustalić, w jaki sposób znak wyjścia jest używany w Sublime2).$0
jest używany w Sublime Text 2/3, aby umieścić kursor na wyjściu z rozszerzenia fragmentu. Więcej informacji o fragmentach .$0
jest całym dopasowaniem wyrażenia regularnego;$1
jest pierwszą grupą przechwytującą.Nawiasem mówiąc, w powyższym pytaniu:
Dla:
Znajdź część:
Z częścią zamienną:
Wróciłbym:
Zmień znajdź część na:
I zamień będzie to, czego oczekujesz:
Chociaż (\ w) + będzie pasować do „bob”, nie jest to grupa, którą chcesz zastąpić.
źródło
Chociaż poprzednia odpowiedź jest poprawna, należy podkreślić ważną rzecz! Wszystkie dopasowane segmentów w ciągu wyszukiwania , które chcesz użyć w ciągu zastępowania muszą być otoczone
( )
nawiasami , inaczej te dopasowane odcinki nie będą dostępne dla określonych zmiennych, takich jak$1
,$2
lub\1
,\2
etc.Na przykład chcemy zamienić „em” na „px”, ale zachować wartości cyfr:
margin: $1px
lubmargin: \1px
margin: ([0-9]*)em
// z nawiasamimargin: [0-9]*em
PRZYKŁAD PRAWIDŁOWEGO PRZYKŁADU: Używanie
margin: ([0-9]*)em
ciągu wyszukiwania (w nawiasach). Załącz żądany dopasowany segment (np.$1
Lub\1
) w( )
nawiasach w następujący sposób:margin: ([0-9]*)em
(z nawiasami)margin: $1px
lubmargin: \1px
PRZYKŁAD NIEPRAWIDŁOWEGO PRZYKŁADU: Używanie
margin: [0-9]*em
ciągu wyszukiwania (bez nawiasów). Poniższy wzór wyrażenia regularnego będzie pasował do żądanych linii, ale dopasowane segmenty nie będą dostępne w zastąpionym ciągu jako zmienne takie jak$1
lub\1
:margin: [0-9]*em
(bez nawiasów)margin: $1px
lubmargin: \1px
źródło
Oto wizualna prezentacja zatwierdzonej odpowiedzi.
źródło
$_SESSION[(\w+)
? dziękiPamiętaj, że jeśli używasz więcej niż 9 grup przechwytywania, musisz użyć składni
${10}
.$10
lub\10
lub nie\{10}
będzie działać.źródło
1
drugą grupę przechwytywania, musisz użyć nawiasów klamrowych takich jak${2}1
; 21 USD odnosi się do 21. grupy przechwytywania, która nie istnieje.Patrząc na artykuł z nieoficjalną dokumentacją Sublime Text na temat Search and Replace , wygląda na to, że
+(.+)
jest to grupa przechwytywania, której możesz chcieć ... ale ja osobiście korzystałem(.*)
i działała dobrze. Aby WYMIENIĆ w sposób, w jaki mówisz, możesz polubić tę rozmowę na forach , szczególnie ten post, który mówi, aby po prostu użyć$1
pierwszej przechwyconej grupy.A ponieważ zdjęcia są lepsze niż słowa ...
Przed:
Po:
źródło