¿Hay alguna forma de hacer que Visual Studio realice un reemplazo de expresiones regulares en varias líneas (deje que la coincidencia cruce los límites de línea)? Sé que hay muchos editores que puedo usar para esto, pero parece extraño que esta característica se haya dejado fuera de Visual Studio. ¿Me estoy perdiendo de algo?
fuente
end
) para que no sea codicioso. es decir:start(.*\n)*.*?end
start
yend
. Si desea encontrar el siguiente,end
use la versión no codiciosa:,(?s)start.*?end
ostart(.*\n)*?.*?end
.(?s)
?Las expresiones regulares han cambiado en Visual Studio 2013 . https://msdn.microsoft.com/en-us/library/2k3te2cs(v=vs.120).aspx
Para hacer coincidir una expresión en dos líneas, el código ahora sería:
StartOfExpression.*\r?\n.*EndOfExpression
fuente
</label>.*\r?\n.*<div
donde\r?\n
está el obvio carriage_return-new_line y.*
para hacer coincidir las posibles pestañas / espaciosEsto funciona hoy en Visual Studio 2012:
fooPatternToStart.*(.*\n)+?.*barPatternToEnd
Vea cómo la
(.*\n)+?
pieza coincide en varias líneas, sin codicia.fooPatternToStart
hay un patrón de expresiones regulares en su línea de inicio, mientrasbarPatternToEnd
que su patrón es encontrarlo en otra línea debajo, posiblemente muchas líneas debajo ...Ejemplo encontrado aquí .
Simple y efectivo :)
Nota: antes de VS2012, el patrón que funcionó fue:
fooPatternToStart.(.\n)+@.*barPatternToEnd
fuente
sprintf.*(.*\n)+?.*log.*(.*\n)+?.*__func__
funciona para buscarlog
entresprintf
y__func__
, ¡gracias! Aunque ... parece mirar al infinito para eso ... si solo hubiera una manera de limitar la cantidad de líneasNota: esta respuesta usa la sintaxis de expresiones regulares utilizada en Visual Studio hasta VS 2012. En VS 2013 y versiones posteriores, la sintaxis de expresiones regulares ha cambiado.
Puede incluir
\n
en la expresión. Como ejemplo, aquí hay una expresión regular que utilizo para "limpiar" los scripts SQL generados automáticamente de cualquier cosa que no sea un procedimiento almacenado (coincidirá con los bloques de texto que comienzan con una línea que contiene "Objeto:" seguido de algo que no es "StoredProcedure", luego hacer coincidir las siguientes líneas hasta una línea consiste en la palabra "GO"):/\*+ Object\::b:b~(StoredProcedure)(.*\n)#GO\n
fuente
es posible que deba usar \ r \ n al final de su expresión.
fuente
Captura de caracteres multilínea no codiciosa, Visual Studio 2013+:
.*?\r?\n.*?
Versión codiciosa en la respuesta de Giles Roberts.
fuente
Para todos los que vienen aquí mientras buscan VS Code, lo uso para hacer coincidir cualquier cosa desde
script
cualquier lugar con 2 líneas nuevas (excluidas las líneas nuevas):script(.|\n)+?(?=\n\n)
reemplazar
script
y\n\n
hacer coincidir todo entre ellos.fuente