"Збільшити" якорі
Окрім відповіді @ jecxjo, існує багато ситуацій, коли можна використовувати якорі нульової ширини \zs
та \ze
замість позитивного пошуку. Ці якорі визначають початок ( \zs
) та кінець ( \ze
) матчу в межах повного шаблону.
Приклади
foo\zsbar
буде матч bar
передує foo
( foo
НЕ є частина матчу)
foo\zebar
буде відповідати foo
наступним bar
( bar
не є частиною матчу)
myFunction(\zs.*\ze)
відповідатиме параметрам у функціональному виклику (для демонстраційних цілей я не зосереджуюсь на жадібному проти несамовитий відповідності)
Введення в експлуатацію
Вони стають найбільш корисними при використанні :substitute
команди. Наприклад, кажуть , що я хотів , щоб замінити параметри у виклику функції , щоб myFunction()
з foo
:
:%s/myFunction(\zs.*\ze)/foo/
Це залишиться myFunction(
і )
недоторканим, і вам не доведеться турбуватися про те, щоб зафіксувати їх у своєму шаблоні чи повторити їх у своїй заміні .
Ви можете зробити це, використовуючи функцію пошуку навколо регексу Vim, але це досить незграбно:
:%s/\(myFunction(\)\@<=.*\()\)\@=/foo/
(Я знаходжу, що цей синтаксис змушує мене в першу чергу забути, що я намагався зробити.)
Іноді вам ще потрібен пошук
Ще є ситуації, коли вам потрібно розібратися. Використання \zs
і \ze
чудово підходить для простих ситуацій, коли у вас є щось, перш ніж слід текст, щоб відповідати, а потім щось після . Але якщо це складніше, ніж це, вам, ймовірно, доведеться дотримуватися більш важкого синтаксису орієнтування.
Кумедний факт
Хоча вони значно гірші, пошукові округи Vim є більш потужними, ніж у PCRE! Вони підтримують негативний погляд ззаду, тобто ви можете стверджувати, що деякий візерунок, довжина якого не визначений, не відповідає вашому поєдинку.
PCRE не підтримує це, оскільки це досить дорого обчислюється. Це не викликає особливих проблем у Vim, оскільки найпоширеніші випадки використання регулярних виразів, як правило, включають інтерактивний пошук, коли час обчислення майже непомітний для користувача. Ви, мабуть, помітили це, якби він використовувався для виділення синтаксису.
Відповідні теми довідки
:help \zs
:help \ze
:help perl-patterns