Próbuję użyć wyrażenia regularnego do zamiany tekstu w pliku (zastąp pełny adres URL tylko protokołem / domeną /):
:%s/\(https\?:\/\/.*?\/\).*/\1/gc
Niestety .*?
nie pasuje do ciągu, nawet próbując uciec przed ?
kwantyfikatorem? W jaki sposób należy uchylić niepochodny kwantyfikator w vimie?
regular-expression
guido
źródło
źródło
:help greedy
zabrałby Cię do właściwego tematu pomocy.:help regexp
to pomoc opisująca smak regularny Vima.Odpowiedzi:
Wyrażenie regularne Vima ma specjalną składnię dla niechcianych wersji operatorów (to trochę denerwujące, ale musisz je zapamiętać): http://vimregex.com/#Non-Greedy
Nie-chciwa wersja
*
to\{-}
. Tak, po prostu zastąpić.*
z.\{-}
:źródło
Wolę zawsze rozkładać problem na dwa etapy:
Używanie bardzo magicznego „\ v”, aby uniknąć wielu odwrotnych ukośników, odwoływanie się do ostatniego wyszukiwania w podstawianiu i zmiana ogranicznika podstawiania. Wszystkie te zmiany sprawiają, że kod jest bardziej czytelny.
źródło
Możesz także użyć,
[^\]+/.
aby zapobiec zachłanności.[^/]
oznacza „dopasuj wszystko/
, czego oczekujesz , i+
powtarza to jeden lub więcej razy.Jeśli mam
/
wyrażenie regularne, użyję go!
jako separatora, aby nie musiałem uciekać/
.Przykład
Załóżmy, że masz następujące adresy URL:
Stosując substytucję, otrzymasz:
źródło