Ответ 1
Вместо .*
используйте .\{-}
.
%s/style=".\{-}"//g
Также см. :help non-greedy
У меня есть большой 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
но Vim, похоже, не нравится ?
. К сожалению, удаление ?
делает матч слишком жадным.
Как я могу сделать мой матч нелогичным?
Вместо .*
используйте .\{-}
.
%s/style=".\{-}"//g
Также см. :help non-greedy
Нежелательный поиск в vim выполняется с помощью оператора {-}. Вот так:
%s/style=".\{-}"//g
просто попробуйте:
:help non-greedy
Что случилось с
%s/style="[^"]*"//g
Если вам удобнее синтаксис regex PCRE, который
у вас есть [g] vim, скомпилированный с функцией perl, с помощью
: ver и проверить функции; если + perl есть, то вам хорошо идти)
попробуйте выполнить поиск/заменить с помощью
:perldo s///
Пример. Swap 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=".*?")/$2 $1/
<p class="logo"><a href="/"><img alt="" src="/caminoglobal_en/includes/themes/camino/images/header_logo.png"></a></p>
Я нашел, что хорошим решением для этого типа вопроса является:
:%!sed ...
(или perl, если вы предпочитаете). IOW, а не изучая особенности регулярного выражения vim, используйте инструмент, который вы уже знаете. Использование perl сделает? модификатор работает, чтобы разгладить совпадение.
Плагин eregex.vim обрабатывает нежелательные операторы в стиле Perl *?
и +?
С \v
(как предложено в нескольких комментариях)
:%s/\v(style|class)\=".{-}"//g
G'day,
Обработка regexp Vim не слишком блестящая. Я обнаружил, что синтаксис regexp для sed - это правильное совпадение возможностей vim.
Я обычно устанавливаю подсветку поиска (: set hlsearch), а затем воспроизвожу с регулярным выражением после ввода косой черты для входа в режим поиска.
Изменить: Отметить, этот трюк, чтобы свести к минимуму жадное соответствие, также рассматривается в Дейл Догерти, отличная книга "Sed and Awk" (санированная ссылка Amazon).
Глава третья "Понимание синтаксиса регулярного выражения" - отличное введение в более примитивные возможности регулярного выражения, связанные с sed и awk. Только короткое чтение и настоятельно рекомендуется.
НТН
веселит,