Existe-t-il un moyen d'obtenir que Visual Studio effectue un remplacement d'expression régulière sur plusieurs lignes (laissez la correspondance franchir les limites des lignes)? Je sais qu'il existe de nombreux éditeurs que je peux utiliser pour cela, mais il semble étrange que cette fonctionnalité ait été omise de Visual Studio. Suis-je en train de manquer quelque chose?
Utiliser la boîte de dialogue de remplacement dans les fichiers Ctrl-Shift-H et l'option de ligne unique (?s)
:
(?s)start.*end
trouve
start
two
three
end
Ligne unique signifie: chaque fichier est traité comme une seule ligne, point .
correspond à la nouvelle ligne \n
. Inconvénient: vous devez utiliser Find All et remplacer tout, ou remplacer à la main. La recherche suivante ne fonctionne pas.
Pour la boîte de dialogue non modale Ctrl-H et trouvez ensuite, utilisez (.*\n)*
pour correspondre à un nombre quelconque de lignes:
start(.*\n)*.*end
Dans les deux cas, vous pouvez remplacer vos résultats par plusieurs lignes en insérant \n
.
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 désormais:
StartOfExpression.*\r?\n.*EndOfExpression
Cela fonctionne aujourd'hui dans Visual Studio 2012:
fooPatternToStart.*(.*\n)+?.*barPatternToEnd
Voyez comment la partie (.*\n)+?
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 que barPatternToEnd
est votre modèle à trouver sur une autre ligne ci-dessous, peut-être plusieurs lignes ci-dessous ...
Exemple trouvé ici .
Simple et efficace :)
Remarque: avant VS2012, le modèle qui fonctionnait était: fooPatternToStart.(.\n)+@.*barPatternToEnd
Remarque: cette réponse utilise la syntaxe d'expression régulière utilisée dans Visual Studio jusqu'à et y compris 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 fera correspondre les blocs de texte qui commencent par une ligne contenant "Object:" suivie par quelque chose qui n'est pas "StoredProcedure", puis faire correspondre les lignes suivantes jusqu'à une ligne se compose du mot "GO"):
/\*+ Object\::b:b~(StoredProcedure)(.*\n)#GO\n
vous devrez peut-être utiliser\r\n à la fin de votre expression.