Kotwy „Zoom”
Oprócz odpowiedzi @ jecxjo istnieje wiele sytuacji, w których można użyć kotwic o zerowej szerokości \zs
i \ze
zamiast pozytywnego spojrzenia. Te kotwice definiują początek ( \zs
) i koniec ( \ze
) dopasowania w ramach pełnego wzorca.
Przykłady
foo\zsbar
dopasuje bar
poprzedzone przez foo
( foo
nie jest częścią meczu)
foo\zebar
dopasuje, foo
a następnie bar
( bar
nie będzie częścią meczu)
myFunction(\zs.*\ze)
dopasuje parametry w wywołaniu funkcji (dla celów demonstracyjnych nie skupiam się na dopasowaniu chciwym a nie chciwym)
Oddanie go do użytku
Stają się one najbardziej przydatne podczas korzystania z :substitute
polecenia. Na przykład, powiedzmy chciałem zastąpić parametry w wywołaniu funkcji celu myFunction()
z foo
:
:%s/myFunction(\zs.*\ze)/foo/
Pozostawi myFunction(
i )
nienaruszone, i nie trzeba się martwić o uchwycenie ich w swojej strukturze lub powtarzając je w wymianie .
Możesz to zrobić, korzystając z funkcji wyszukiwania wyrażenia regularnego Vima, ale jest to dość niezręczne:
:%s/\(myFunction(\)\@<=.*\()\)\@=/foo/
(Uważam, że ta składnia powoduje, że zapominam, co chciałem zrobić w pierwszej kolejności.)
Nadal potrzebujesz czasem spojrzenia
Nadal istnieją sytuacje, w których trzeba się rozejrzeć. Używanie \zs
i \ze
jest idealne do prostych sytuacji, w których masz coś przed, a po nim tekst do dopasowania, a po nim coś po . Ale jeśli jest to bardziej skomplikowane, prawdopodobnie będziesz musiał trzymać się cięższej składni.
Śmieszny fakt
Choć są znacznie brzydsze, spojrzenia Vima są potężniejsze niż w PCRE! Obsługują one negatywne spojrzenie za zmienną długością, co oznacza, że możesz stwierdzić, że jakiś wzór, którego długość nie jest z góry określona, nie jest wcześniejszy niż dopasowanie.
PCRE nie obsługuje tego, ponieważ jest dość drogi obliczeniowo. To nie jest duży problem w Vimie, ponieważ najczęstsze przypadki użycia wyrażenia regularnego obejmują wyszukiwanie interaktywne, w którym czas obliczeń jest prawie niezauważalny dla użytkownika. Prawdopodobnie zauważyłbyś to, gdyby był użyty do podświetlania składni.
Odpowiednie tematy pomocy
:help \zs
:help \ze
:help perl-patterns
Wygląda na to, że jest to możliwe. Istnieje prosta tabela do przejścia z Perla na Vima.
:h perl-patterns
Na przykład, jeśli masz ciąg znaków
one two three
i chcesz dopasowaćone
tylko, jeśli<space>two
podąża za nim, możesz użyćJest to podobne do wersji Perla
źródło