Ich habe eine große HTML-Datei mit vielen Markups, die so aussehen:
<p class="MsoNormal" style="margin: 0in 0in 0pt;">
<span style="font-size: small; font-family: Times New Roman;">stuff here</span>
</p>
Ich versuche ein Vim-Suchen und Ersetzen durchzuführen, um alle class=""
und loszuwerdenstyle=""
aber ich habe Probleme machen das Spiel ungreedy.
Mein erster Versuch war dies
%s/style=".*?"//g
aber Vim scheint das nicht zu mögen ?
. Leider entfernen die?
macht das das Match zu gierig.
Wie kann ich mein Match ungreedy machen?
regex
vim
regex-greedy
Mark Biek
quelle
quelle
Antworten:
Anstelle von
.*
Gebrauch.\{-}
.%s/style=".\{-}"//g
Siehe auch
:help non-greedy
quelle
\v
(sehr magische Flagge) setzt, möchten Sie verwenden.{-}
.{1,3}
bei Klammern. Das Minuszeichen-
bedeutet: so wenig wie möglich wiederholen (wenig == Minus);)Die nicht gierige Suche in vim erfolgt mit dem Operator {-}. So was:
Probiere es einfach:
quelle
Was ist falsch mit
quelle
Wenn Sie mit der PCRE-Regex-Syntax vertraut sind, welche
Sie haben [g] vim mit Perl-Funktion kompiliert, testen mit
: Merkmale überprüfen und überprüfen; Wenn + Perl da ist, kannst du gehen.
Versuchen Sie es mit Suchen / Ersetzen mit
Beispiel. Tauschen Sie die src- und alt-Attribute im img-Tag aus:
quelle
perldo
funktioniert gut, hebt aber leider den ausgewählten Test beim Eingeben des regulären Ausdrucks nicht hervor.Ich habe festgestellt, dass eine gute Lösung für diese Art von Frage ist:
(oder Perl, wenn Sie es vorziehen). Verwenden Sie ein Tool, das Sie bereits kennen, anstatt die Regex-Besonderheiten von vim zu lernen. Mit Perl würde das? Modifikator arbeiten, um das Match zu entkräften.
quelle
/pattern
zu überprüfen, ob Sie mit dem Muster übereinstimmen, bevor Sie es anwenden und denc
Modifikator in Ihrem regulären Vim-Ausdruck verwenden :)Mit
\v
(wie in mehreren Kommentaren vorgeschlagen)quelle
Das Plugin eregex.vim verarbeitet nicht gierige Perl-Operatoren
*?
und+?
quelle
Tag auch,
Die Regexp-Verarbeitung von Vim ist nicht allzu brillant. Ich habe festgestellt, dass die Regexp-Syntax für sed in etwa den Funktionen von vim entspricht.
Normalerweise setze ich die Suchhervorhebung auf (: setze hlsearch) und spiele dann mit dem regulären Ausdruck, nachdem ich einen Schrägstrich eingegeben habe, um in den Suchmodus zu wechseln.
Bearbeiten: Mark, dieser Trick, um gierige Übereinstimmungen zu minimieren, wird auch in Dale Doughertys ausgezeichnetem Buch "Sed & Awk" ( bereinigter Amazon-Link) behandelt ) behandelt.
Kapitel 3 "Grundlegendes zur Syntax regulärer Ausdrücke" ist eine hervorragende Einführung in die primitiveren Regexp-Funktionen von sed und awk. Nur eine kurze Lektüre und sehr zu empfehlen.
HTH
Prost,
quelle
\v
, hilft es, die Syntax viel zu bereinigen.