quiero hacer esto:Vim expresiones regulares retrorreferencia
%s/shop_(*)/shop_\1 wp_\1/
¿Por qué no shop_(*)
partido nada?
quiero hacer esto:Vim expresiones regulares retrorreferencia
%s/shop_(*)/shop_\1 wp_\1/
¿Por qué no shop_(*)
partido nada?
Si he entendido bien, que desea %s/shop_\(.*\)/shop_\1 wp_\1/
Escapar del paréntesis de captura y el uso de .*
para que coincida con cualquier número de cualquier carácter.
(Su búsqueda es la búsqueda de "shop_" seguido de cualquier número de abrir paréntesis, seguido de un paréntesis de cierre)
Hay varias cuestiones aquí.
parens en regexen vim no son para capturar - es necesario utilizar \(\)
para las capturas.
*
no significa lo que piensas. Significa "0 o más de los anteriores", por lo que su expresión regular significa "una cadena que contiene shop_
seguido de 0+ (
y luego un literal )
.
Está buscando .
, que en expresiones regulares significa" cualquier carácter ". junto con una estrella como .*
que significa "0 o más de cualquier carácter" Usted probablemente querrá al menos un carácter, a fin de utilizar .\+
(+
significa "1 o más de los anteriores")
Utilice esta.: %s/shop_\(.\+\)/shop_\1 wp_\1/
.
Opcionalmente termínelo con g
después de la barra final para reemplazar todas las instancias en una línea en lugar de solo la primera.
Estoy un poco más cerca: '% s/shop _/& wp_ \ 1' – nnyby
Si no entendí correctamente, intente agregar ejemplos. – Stephen
Esta pregunta sería más útil para los futuros usuarios de SO si se agregara un ejemplo de lo que se intenta con la expresión regular. – LondonRob