* repräsentiert gieriges Matching (so viele wie möglich)
In Vim können Sie Anker mit der Breite Null verwenden \zsund \zeden Anfang und das Ende des gesuchten Musters definieren, mit dem Sie übereinstimmen möchten. Alles Vorher \zsund Nachher \zein Ihrem Muster bleibt vom Austausch unberührt.
Können Sie bitte eine grundlegende Beschreibung \zsIhrer Antwort geben?
EvergreenTree
3
Es ist erwähnenswert, dass der Grund , dies funktioniert , ist , weil .*ist gierig .
Wildcard
7
Sie können nach der letzten Übereinstimmung suchen, indem Sie alle \(.*\), aber das letzte Vorkommen von gruppieren pattern. Beenden Sie dann mit der erfassten Gruppe \1und fügen Sie die hinzu replacement.
(Dies ist der \zsLösung von @ ryuichiro insofern unterlegen , als Ihr \1Ansatz funktional äquivalent, aber ausführlicher ist. (Auf der anderen Seite ist es für einige möglicherweise einfacher, sich zu erinnern, insbesondere wenn sie an andere Regex-Aromen gewöhnt sind.)
Aaron Thoma
0
Der Vollständigkeit halber dachte ich, ich würde eine Alternative posten. Vim verfügt über mehrere Elemente, von denen einige den standardmäßigen Lookaround-Behauptungen für reguläre Ausdrücke (negativer / positiver Lookahead / Lookbehind) ähneln. /programming/2973436/regex-lookahead-lookbehind-and-atomic-groups
In diesem Fall wollen wir einen negativen Lookahead, das \@!heißt, wir wollen behaupten, dass das Atom , das dem Element vorausgeht, nicht nach dem Muster auftritt . In diesem Fall ist das Atom das Muster selbst, dem etwas anderes vorangeht:
:%s/pattern\(.*pattern\)\@!/replacement/
Der Teil in den Klammern hat die Breite Null und ist nicht in der Übereinstimmung enthalten, sodass er nicht durch die Ersetzung ersetzt wird.
:h \@!Für weitere Informationen oder :h pattern-multi-itemsfür den gesamten Abschnitt mit anderen Lookaround-Variationen.
\zs
Ihrer Antwort geben?.*
ist gierig .Sie können nach der letzten Übereinstimmung suchen, indem Sie alle
\(.*\)
, aber das letzte Vorkommen von gruppierenpattern
. Beenden Sie dann mit der erfassten Gruppe\1
und fügen Sie die hinzureplacement
.quelle
\zs
Lösung von @ ryuichiro insofern unterlegen , als Ihr\1
Ansatz funktional äquivalent, aber ausführlicher ist. (Auf der anderen Seite ist es für einige möglicherweise einfacher, sich zu erinnern, insbesondere wenn sie an andere Regex-Aromen gewöhnt sind.)Der Vollständigkeit halber dachte ich, ich würde eine Alternative posten. Vim verfügt über mehrere Elemente, von denen einige den standardmäßigen Lookaround-Behauptungen für reguläre Ausdrücke (negativer / positiver Lookahead / Lookbehind) ähneln. /programming/2973436/regex-lookahead-lookbehind-and-atomic-groups
In diesem Fall wollen wir einen negativen Lookahead, das
\@!
heißt, wir wollen behaupten, dass das Atom , das dem Element vorausgeht, nicht nach dem Muster auftritt . In diesem Fall ist das Atom das Muster selbst, dem etwas anderes vorangeht:Der Teil in den Klammern hat die Breite Null und ist nicht in der Übereinstimmung enthalten, sodass er nicht durch die Ersetzung ersetzt wird.
:h \@!
Für weitere Informationen oder:h pattern-multi-items
für den gesamten Abschnitt mit anderen Lookaround-Variationen.quelle