J'essaie d'utiliser une expression régulière pour remplacer le texte dans un fichier (remplacez une URL complète par juste protocole / domaine /):
:%s/\(https\?:\/\/.*?\/\).*/\1/gc
Malheureusement, .*?
ne correspond pas à la chaîne, même en essayant d'échapper au ?
quantificateur? Comment échapper un quantificateur non gourmand dans vim?
regular-expression
guido
la source
la source
:help greedy
vous aurait conduit au bon sujet d'aide.:help regexp
est l'aide décrivant l'arôme regex de Vim.Réponses:
L'expression régulière de Vim a une syntaxe spéciale pour les versions non gourmandes des opérateurs (c'est un peu ennuyeux, mais il suffit de les mémoriser): http://vimregex.com/#Non-Greedy
La version non gourmande de
*
is\{-}
. Donc, remplacez simplement.*
par.\{-}
:la source
Je préfère toujours diviser le problème en deux étapes:
Utiliser le "\ v" très magique pour éviter de nombreuses barres obliques inverses, référencer la dernière recherche en substitution et changer le délimiteur de substitution. Toutes ces modifications rendent le code plus lisible.
la source
Vous pouvez également utiliser le
[^\]+/.
pour éviter la gourmandise.[^/]
signifie "correspondre à tout ce que vous attendez/
, et le+
répète une ou plusieurs fois ..Si je l'ai
/
dans l'expression régulière, je vais l'utiliser!
comme séparateur pour ne pas avoir à m'échapper/
.Exemple
Supposons que vous ayez les URL suivantes:
En appliquant la substitution, vous obtiendriez que:
la source