570 Stimmen

Wie kann ich mein Spiel in vim nicht gierig machen?

Ich habe eine große HTML-Datei mit vielen Auszeichnungselementen, die wie folgt 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, eine Vim-Suche und -Ersetzung durchzuführen, um alle class="" y style="" aber es fällt mir schwer, das Spiel ungerecht zu gestalten.

Mein erster Versuch war dieser

%s/style=".*?"//g

aber Vim scheint nicht die ? . Leider ist das Entfernen der ? macht das Spiel zu gierig.

Wie kann ich mein Spiel ungeduldig machen?

0 Stimmen

Ich finde die Antwort von Paul gut. Nur um zu sagen, dass "?" in vim nicht optional bedeutet (wenn es das ist, was Sie mit "?" erreichen wollen)

16 Stimmen

@LB, in vielen Sprachen bedeutet .*?, dass ein beliebiges Zeichen übereinstimmt, aber nicht gierig ist. Das ist es, was er zu erreichen versucht.

0 Stimmen

5voto

JJoao Punkte 4381

とのことです。 \v (wie in mehreren Kommentaren vorgeschlagen)

:%s/\v(style|class)\=".{-}"//g

4voto

bain Punkte 1350

Plugin eregex.vim behandelt nicht-gierige Operatoren im Perl-Stil *? y +?

-3voto

Rob Wells Punkte 35303

Guten Tag,

Die Regexp-Verarbeitung von Vim ist nicht allzu brillant. Ich habe herausgefunden, dass die Regexp-Syntax von sed in etwa den Fähigkeiten von Vim entspricht.

Normalerweise schalte ich die Suchhervorhebung ein (:set hlsearch) und spiele dann mit dem Regexp, nachdem ich einen Schrägstrich eingegeben habe, um den Suchmodus zu aktivieren.

Bearbeiten: Mark, dieser Trick zur Minimierung des gierigen Abgleichs wird auch in Dale Doughertys ausgezeichnetem Buch "Sed & Awk" behandelt ( gereinigter Amazon-Link ).

Kapitel drei "Die Syntax regulärer Ausdrücke verstehen" ist eine ausgezeichnete Einführung in die primitiveren regexp-Funktionen von sed und awk. Nur eine kurze Lektüre und sehr empfehlenswert.

HTH

Prost,

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X