Eu tenho um grande arquivo HTML com muitas marcações assim:
<p class="MsoNormal" style="margin: 0in 0in 0pt;">
<span style="font-size: small; font-family: Times New Roman;">stuff here</span>
</p>
Eu estou tentando fazer um Vim pesquisa e substituição para se livrar de tudo class=""
e style=""
mas estou tendo problemas para fazer o jogo ungreedy.
Minha primeira tentativa foi essa
%s/style=".*?"//g
mas Vim não parece gostar do ?
. Infelizmente, remover o ?
jogo torna a partida muito gananciosa.
Como posso tornar a minha partida desagradável?
regex
vim
regex-greedy
Mark Biek
fonte
fonte
Respostas:
Em vez de
.*
usar.\{-}
.%s/style=".\{-}"//g
Veja também
:help non-greedy
fonte
\v
(bandeira muito mágica), você precisará usar.{-}
.{1,3}
faz (chaves). O sinal de menos-
meios: Repetir o mínimo possível (pouco == menos);)A pesquisa não gananciosa no vim é feita usando o operador {-}. Como isso:
apenas tente:
fonte
O que há de errado com
fonte
Se você estiver mais confortável com a sintaxe PCRE regex, que
você [v] compilou com o recurso perl, teste usando
: ver e inspecionar recursos; se + perl está aí, você está pronto para ir)
tente pesquisar / substituir usando
Exemplo. Troque os atributos src e alt na tag img:
fonte
perldo
funciona muito bem, mas infelizmente não destaca o teste selecionado ao digitar o regex.Eu descobri que uma boa solução para esse tipo de pergunta é:
(ou perl, se você preferir). IOW, em vez de aprender as peculiaridades de regex do vim, use uma ferramenta que você já conhece. Usar perl faria o? trabalho modificador para ungreedy a partida.
fonte
/pattern
para verificar se você está correspondendo corretamente ao padrão antes de aplicá-lo e usar oc
modificador em sua expressão regular do vim também é bom :)With
\v
(como sugerido em vários comentários)fonte
O plug-in eregex.vim lida com operadores não gananciosos no estilo Perl
*?
e+?
fonte
G'day,
O processamento regexp do Vim não é muito brilhante. Descobri que a sintaxe regexp para sed é a combinação certa para os recursos do vim.
Normalmente, defino o destaque de pesquisa em (: defina hlsearch) e depois jogo com o regexp depois de inserir uma barra para entrar no modo de pesquisa.
Edit: Mark, esse truque para minimizar a correspondência gananciosa também é abordado no excelente livro de Dale Dougherty, "Sed & Awk" ( link higienizado da Amazon ).
O capítulo três, "Entendendo a sintaxe da expressão regular", é uma excelente introdução aos recursos de regexp mais primitivos envolvidos no sed e no awk. Apenas uma leitura curta e altamente recomendada.
HTH
Felicidades,
fonte
\v
, ajudará a limpar bastante a sintaxe.