Ich versuche, einen regulären Ausdruck zum Ersetzen von Text in einer Datei zu verwenden (ersetzen Sie eine vollständige URL nur durch protocol / domain /):
:%s/\(https\?:\/\/.*?\/\).*/\1/gc
Leider .*?
passt der String nicht, auch wenn versucht wird, dem ?
Quantor zu entkommen ? Wie soll ein nicht gieriger Quantor in vim entkommen?
regular-expression
Guido
quelle
quelle
:help greedy
hätte Sie zum richtigen Hilfethema geführt.:help regexp
ist die Hilfe, die Vims Regex-Geschmack beschreibt.Antworten:
Vims Regex hat eine spezielle Syntax für nicht-gierige Versionen von Operatoren (es ist etwas ärgerlich, aber Sie müssen sie sich nur merken): http://vimregex.com/#Non-Greedy
Die nicht gierige Version von
*
ist\{-}
. Also einfach ersetzen.*
durch.\{-}
:quelle
Ich ziehe es vor, das Problem immer in zwei Schritte zu unterteilen:
Verwenden Sie sehr magisches "\ v", um viele Backslashes zu vermeiden, verweisen Sie auf die letzte Suche in der Substitution und ändern Sie das Substitutionsbegrenzungszeichen. All diese Änderungen verbessern die Lesbarkeit des Codes.
quelle
Sie können auch die verwenden
[^\]+/.
, um Gier zu verhindern.[^/]
bedeutet "Finde alles/
, was du erwartest" und+
wiederholt dies ein oder mehrere Male.Wenn ich
/
in der Regex habe, werde ich!
als Trennzeichen verwenden, damit ich nicht entkommen muss/
.Beispiel
Angenommen, Sie haben die folgenden URLs:
Wenn Sie die Substitution anwenden, erhalten Sie Folgendes:
quelle