Как я могу сделать свой матч не жадным в vim?
у меня есть большой HTML-файл, который имеет много разметку, которая выглядит так:
<p class="MsoNormal" style="margin: 0in 0in 0pt;">
<span style="font-size: small; font-family: Times New Roman;">stuff here</span>
</p>
Я пытаюсь сделать поиск и замена в Vim, чтобы избавиться от всех class=""
и style=""
но у меня возникли проблемы с тем, чтобы сделать матч нескладным.
моя первая попытка была такой
%s/style=".*?"//g
но Вим, кажется, не нравится ?
. К сожалению, удаление ?
делает матч слишком жадные.
как я могу сделать мои нежадные матч?
8 ответов:
не жадный поиск в vim выполняется с помощью оператора { -}. Вот так:
%s/style=".\{-}"//g
попробуй:
:help non-greedy
Если вам удобнее синтаксис регулярных выражений PCRE, который
- поддерживает не-жадный оператор ? как вы просили в ОП; и
- не требует группирования backwhacking и операторов мощности (совершенно нелогичное требование синтаксиса vim, поскольку вы не сопоставляете литеральные символы, но указываете операторы); и
у вас есть [g]vim, скомпилированный с функцией perl, тест с использованием
:ver и проверьте функции; если +perl есть ты хорошо идешь)
попробуйте найти / заменить с помощью
:perldo s///
пример. Замените src и Alt атрибуты в теге img:
<p class="logo"><a href="/"><img src="/caminoglobal_en/includes/themes/camino/images/header_logo.png" alt=""></a></p> :perldo s/(src=".*?")\s+(alt=".*?")/ / <p class="logo"><a href="/"><img alt="" src="/caminoglobal_en/includes/themes/camino/images/header_logo.png"></a></p>
Я обнаружил, что хорошим решением этого типа вопроса является:
:%!sed ...(или Perl, если вы предпочитаете). IOW, вместо того, чтобы изучать особенности регулярных выражений vim, используйте инструмент, который вы уже знаете. Использование perl сделает это ? модификатор работает, чтобы ungreedy матч.
плагин eregex.ВИМ обрабатывает не жадные операторы в стиле Perl
*?
и+?
Добрый день,
обработка регулярных выражений Vim не слишком блестящая. Я обнаружил, что синтаксис регулярных выражений для sed примерно соответствует возможностям vim.
Я обычно устанавливаю подсветку поиска (: set hlsearch), а затем играю с регулярным выражением после ввода косой черты, чтобы войти в режим поиска.
Edit: Марк, этот трюк для минимизации жадного соответствия также описан в превосходной книге Дейла Догерти "Sed & Awk" (продезинфицировать Амазонки ссылка).
Глава третья "понимание синтаксиса регулярных выражений" - отличное введение в более примитивные возможности регулярных выражений, связанные с sed и awk. Только короткое чтение и настоятельно рекомендуется.
HTH
спасибо,