Estoy tratando de usar una expresión regular para reemplazar el texto en un archivo (reemplace una URL completa con solo protocolo / dominio /):
:%s/\(https\?:\/\/.*?\/\).*/\1/gc
Lamentablemente .*?
no coincide con la cadena, incluso tratando de escapar del ?
cuantificador? ¿Cómo se debe escapar el cuantificador no codicioso en vim?
regular-expression
guido
fuente
fuente
:help greedy
te habría llevado al tema de ayuda correcto.:help regexp
es la ayuda que describe el sabor regex de Vim.Respuestas:
La expresión regular de Vim tiene una sintaxis especial para las versiones no codiciosas de los operadores (es un poco molesto, pero solo tienes que memorizarlas): http://vimregex.com/#Non-Greedy
La versión no codiciosa de
*
es\{-}
. Entonces, simplemente reemplace.*
con.\{-}
:fuente
Prefiero siempre dividir el problema en dos pasos:
Usando "\ v" muy mágico para evitar muchas barras invertidas, haciendo referencia a la última búsqueda en sustitución y cambiando el delimitador de sustitución. Todos estos cambios hacen que el código sea más legible.
fuente
También puede usar el
[^\]+/.
para evitar la codicia.[^/]
significa "igualar todo lo que se espera/
, y lo+
repite una o más veces ..Si tengo
/
en la expresión regular, lo usaré!
como separador para no tener que escapar/
.Ejemplo
Supongamos que tiene las siguientes URL:
Aplicando la sustitución obtendría eso:
fuente