Kotwy „Zoom”
Oprócz odpowiedzi @ jecxjo istnieje wiele sytuacji, w których można użyć kotwic o zerowej szerokości \zsi \zezamiast pozytywnego spojrzenia. Te kotwice definiują początek ( \zs) i koniec ( \ze) dopasowania w ramach pełnego wzorca.
Przykłady
foo\zsbardopasuje barpoprzedzone przez foo( foonie jest częścią meczu)
foo\zebardopasuje, fooa następnie bar( barnie 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 :substitutepolecenia. 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 \zsi \zejest 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