Existe-t-il un moyen pour que Visual Studio effectue un remplacement de regex sur plusieurs lignes (laissez la correspondance traverser les limites de ligne)? Je sais que je peux utiliser de nombreux éditeurs pour cela, mais il semble étrange que cette fonctionnalité ait été laissée en dehors de Visual Studio. Est-ce que je manque quelque chose?
la source
end
) donc ce n'est pas gourmand. ie:start(.*\n)*.*?end
start
etend
. Si vous voulez trouver la toute prochaine,end
utilisez la version non gourmande:,(?s)start.*?end
oustart(.*\n)*?.*?end
.(?s)
?Les expressions régulières ont changé dans Visual Studio 2013 . https://msdn.microsoft.com/en-us/library/2k3te2cs(v=vs.120).aspx
Pour faire correspondre une expression sur deux lignes, le code serait maintenant:
StartOfExpression.*\r?\n.*EndOfExpression
la source
</label>.*\r?\n.*<div
où se\r?\n
trouve l'évidente chariot_return-new_line et.*
pour faire correspondre les tabulations / espaces possiblesCela fonctionne aujourd'hui dans Visual Studio 2012:
fooPatternToStart.*(.*\n)+?.*barPatternToEnd
Voyez comment la
(.*\n)+?
pièce fait la correspondance sur plusieurs lignes, non gourmande.fooPatternToStart
est un modèle d'expression régulière sur votre ligne de départ, tandis quebarPatternToEnd
votre modèle est à trouver sur une autre ligne ci-dessous, éventuellement plusieurs lignes ci-dessous ...Exemple trouvé ici .
Simple et efficace :)
Remarque: avant VS2012, le modèle qui fonctionnait était:
fooPatternToStart.(.\n)+@.*barPatternToEnd
la source
sprintf.*(.*\n)+?.*log.*(.*\n)+?.*__func__
fonctionne pour rechercherlog
entresprintf
et__func__
, merci! Tho .. il semble regarder dans l'infini pour cela .. s'il n'y avait qu'un moyen de limiter le nombre de lignesRemarque: cette réponse utilise la syntaxe d'expression régulière utilisée dans Visual Studio jusqu'à VS 2012. Dans VS 2013 et versions ultérieures, la syntaxe d'expression régulière a changé.
Vous pouvez inclure
\n
dans l'expression. À titre d'exemple, voici une expression régulière que j'utilise pour «nettoyer» les scripts SQL générés automatiquement de tout ce qui n'est pas une procédure stockée (il correspondra aux blocs de texte commençant par une ligne contenant «Object:» suivi de quelque chose qui n'est pas "StoredProcedure", puis faire correspondre les lignes suivantes à une ligne se compose du mot "GO"):/\*+ Object\::b:b~(StoredProcedure)(.*\n)#GO\n
la source
vous devrez peut-être utiliser \ r \ n à la fin de votre expression.
la source
Non-gourmand multi-ligne toute capture de caractères, Visual Studio 2013+:
.*?\r?\n.*?
Version gourmande dans la réponse de Giles Roberts.
la source
Pour tous ceux qui viennent ici en cherchant VS Code, j'utilise ceci pour faire correspondre n'importe quoi de
script
n'importe où avec 2 nouvelles lignes (nouvelles lignes exclues):script(.|\n)+?(?=\n\n)
remplacer
script
et\n\n
faire correspondre tout entre eux.la source