Ich möchte, dies zu tun:Vim regex Rückreferenzierung
%s/shop_(*)/shop_\1 wp_\1/
Warum funktioniert shop_(*)
etwas Spiel?
Ich möchte, dies zu tun:Vim regex Rückreferenzierung
%s/shop_(*)/shop_\1 wp_\1/
Warum funktioniert shop_(*)
etwas Spiel?
Wenn ich richtig verstehe, wollen Sie %s/shop_\(.*\)/shop_\1 wp_\1/
die Erfassung Klammer Flucht- und verwenden .*
eine beliebige Anzahl von beliebigen Zeichen übereinstimmen.
(Ihre Suche nach einer beliebigen Anzahl für „shop_“ gefolgt sucht der von einer schließenden Klammer gefolgt Klammern zu öffnen)
Es gibt einige Probleme hier.
Pars in vim regexen sind nicht für die Erfassung - Sie \(\)
für Aufnahmen verwenden müssen.
*
bedeutet nicht, was Sie denken. Es bedeutet "0 oder mehr der vorherigen", also Ihre Regex bedeutet "eine Zeichenfolge, die shop_
, gefolgt von 0 + (
und dann ein Literal )
enthält. Sie suchen nach .
, die in Regex bedeutet" jedes Zeichen " zusammen mit einem Stern als .*
bedeutet es „0 oder mehr von einem beliebigen Zeichen“ Sie wollen wahrscheinlich mindestens ein Zeichen, so .\+
(+
bedeutet „1 oder mehr der vorherigen“) dieser
Gebrauch verwenden.: %s/shop_\(.\+\)/shop_\1 wp_\1/
.
Optional beenden Sie es mit g
nach dem letzten Schrägstrich Ersetzen Sie für alle Instanzen in einer Zeile statt nur die erste Zeile.
Ich bin ein wenig näher: '% s/shop _/& wp_ \ 1' – nnyby
Wenn ich nicht richtig verstanden habe, versuche Beispiele hinzuzufügen. – Stephen
Diese Frage wäre für zukünftige SO-Benutzer hilfreicher, wenn ein Beispiel für das hinzugefügt wird, was mit der Regex versucht wird. – LondonRob