Utiliser des expressions régulières dans Visual Studio
Visual Studio utilise des expressions régulières de .NET pour rechercher et remplacer du texte.
Syntaxe d’expression régulière
Le tableau suivant contient des caractères d’expression régulière, des opérateurs, des constructions et des exemples de modèles. Pour obtenir une référence plus complète, consultez langage d’expression régulière.
Objectif | Expression | Exemple |
---|---|---|
Correspond à n'importe quel caractère unique (sauf un saut de ligne). Pour plus d’informations, consultez Tout caractère. | . | a.o correspond à « aro » dans « around » et à « abo » dans « about », mais pas à « acro » dans « across » |
Correspond à zéro ou plusieurs occurrences de l'expression précédente (correspond à autant de caractères que possible). Pour plus d’informations, consultez Mettre en correspondance zéro occurrence ou plus. | * | a*r correspond à « r » dans « rack », « ar » dans « ark », et « aar » dans « aardvark » |
Correspond à tout caractère zéro ou plusieurs fois. | .* | c.*e correspond à « cke » dans « racket », à « comme » dans « comment » et à « code » dans « code » |
Mettre en correspondance une ou plusieurs occurrences de l’expression précédente (correspondent autant de caractères que possible). Pour plus d’informations, consultez Mettre en correspondance une occurrence ou plus. | + | e+d correspond à « eed » dans « feeder » et « ed » dans « faded » |
Faire correspondre n'importe quel caractère une ou plusieurs fois. | .+ | e.+e correspond à « eede » dans « feeder », mais ne trouve aucune correspondance dans « feed » |
Mettre en correspondance zéro ou plusieurs occurrences de l'expression précédente (correspondant au minimum de caractères possible). Pour plus d’informations, consultez Mettre en correspondance zéro occurrence ou plus (correspondance paresseuse). | *? | \w*?d correspond à « fad » et « ed » dans « faded », mais pas à l’intégralité du mot « faded » en raison de la correspondance paresseuse |
Mettre en correspondance une ou plusieurs occurrences de l’expression précédente (en correspondant le moins de caractères possible). Pour plus d’informations, consultez Mettre en correspondance une occurrence ou plus (correspondance paresseuse). | +? | e\w+? correspond à "ee" dans "asleep" et "ed" dans "faded", mais ne trouve aucune correspondance dans "fade". |
Ancre la chaîne de correspondance au début d'une ligne ou d'une chaîne | ^ | ^car correspond au mot « voiture » uniquement lorsqu’il apparaît au début d’une ligne |
Ancre la chaîne de correspondance à la fin d'une ligne | \r?$ | car\r?$ correspond à « voiture » uniquement lorsqu’elle apparaît à la fin d’une ligne |
Ancre la chaîne de correspondance à la fin du fichier | $ | car$ correspond à « car » uniquement lorsqu’il apparaît à la fin du fichier |
Correspond à n'importe quel caractère unique d'un ensemble | [abc] | b[abc] correspond à « ba », « bb » et « bc » |
Mettre en correspondance n’importe quel caractère dans une plage de caractères | [a-f] | be[n-t] correspond à « bet » dans « between », « ben » in « beneath », et « bes » dans « beside », mais ne trouve aucune correspondance dans « below » |
Capturer et chiffrer implicitement l’expression contenue entre parenthèses | () | ([a-z])X\1 correspond à « aXa » et « bXb », mais pas à « aXb ». « \1 » fait référence au premier groupe d’expressions « [a-z] ». Pour plus d’informations, consultez Groupes de captures et modèles de remplacement. |
Invalider un match | (?!abc) | real(?!ity) correspond à « real » dans « realty » et « really » mais pas dans « reality ». Il trouve également le deuxième « real » (mais pas le premier « real ») dans « realityreal ». |
Mettre en correspondance n’importe quel caractère qui n’est pas dans un ensemble donné de caractères. Pour plus d’informations, voir le groupe de caractères négatifs . | [^abc] | be[^n-t] correspond à « bef » dans « avant », « beh » dans « derrière » et « bel » dans « en dessous », mais ne trouve aucune correspondance dans « en dessous de ». |
Mettre en correspondance l’expression avant ou celle après le symbole | | | (sponge|mud) bath correspond à « bain d’éponge » et « bain de boue » |
Crée une séquence d'échappement pour le caractère placé après la barre oblique inverse | \ | \^ correspond au caractère ^ |
Spécifiez le nombre d’occurrences du caractère ou du groupe précédent. Pour plus d’informations, consultez Mettre en correspondance exactement n occurrences. | {n}, où 'n' est le nombre d’occurrences | x(ab){2}x correspond à « xababx »x(ab){2,3}x correspond à « xababx » et « xabababx », mais pas à « xababababx » |
Mettre en correspondance un texte dans une catégorie Unicode. Pour plus d’informations sur les classes de caractères Unicode, consultez Propriétés de caractères Unicode Standard 15.0. | \p{X}, où « X » est le nombre Unicode. | \p{Lu} correspond à « T » et « D » dans « Thomas Doe » |
Correspond à la limite d'un mot | \b (en dehors d’une classe de caractères \b spécifie une limite de mot et, à l’intérieur d’une classe de caractères, \b spécifie un retour arrière) |
\bin correspond à « in » dans « inside », mais ne trouve aucune correspondance dans « pinto » |
Correspond à un saut de ligne (c’est-à-dire un retour chariot suivi d’une nouvelle ligne ou d’une nouvelle ligne uniquement) | \r?\n | End\r?\nBegin correspond à « End » et « Begin » uniquement lorsque « End » est la dernière chaîne d’une ligne et « Begin » est la première chaîne de la ligne suivante. |
Correspond à n’importe quel caractère alphabétique | \w | a\wd correspond à « add » et « a1d », mais pas à « a d » |
Correspond à n'importe quel espace blanc | \s | Public\sInterface correspond à l’expression « Interface publique » |
Correspond à n’importe quel caractère numérique décimal | \d | \d correspond à « 4 » et « 0 » dans « wd40 » |
Un exemple d’expression régulière qui combine certains des opérateurs et des constructions pour correspondre à un nombre hexadécimal est \b0[xX]([0-9a-fA-F]+)\b
. Cette expression correspond à « 0xc67f », mais pas à « 0xc67g ».
Conseil
Dans les systèmes d’exploitation Windows, la plupart des lignes se terminent par « \r\n » (retour chariot suivi d’une nouvelle ligne). Ces caractères ne sont pas visibles, mais sont présents dans l’éditeur et transmis au service d’expression régulière .NET. Lorsque vous traitez des fichiers à partir du web ou d’un système d’exploitation non Windows, veillez à tenir compte de la possibilité qu’ils utilisent une nouvelle ligne uniquement pour un saut de ligne.
Groupes de capture et modèles de remplacement
Un groupe de capture délimite une sous-expression d’une expression régulière et capture une sous-chaîne d’une chaîne d’entrée. Vous pouvez utiliser des groupes capturés dans l’expression régulière elle-même (par exemple, pour rechercher un mot répété) ou dans un modèle de remplacement. Pour plus d’informations, consultez Constructions de regroupement dans les expressions régulières.
Pour créer un groupe de capture numéroté, entourez la sous-expression avec des parenthèses dans le modèle d’expression régulière. Les captures sont numérotées automatiquement de gauche à droite en fonction de la position de la parenthèse ouvrante dans l’expression régulière. Pour accéder au groupe capturé, tenez compte des exemples suivants :
Dans l’expression régulière: utilisez
\number
. Par exemple,\1
dans l’expression régulière(\w+)\s\1
fait référence au premier groupe de capture(\w+)
.Dans un modèle de remplacement: utilisez
$number
. Par exemple, l’expression régulière groupée(\d)([a-z])
définit deux groupes : le premier groupe contient un chiffre décimal unique et le deuxième groupe contient un caractère unique entre un et z. L’expression recherche quatre correspondances dans la chaîne suivante : 1a 2b 3c 4d. La chaîne de remplacementz$1
fait référence au premier groupe uniquement ($1
) et convertit la chaîne en z1 z2 z3 z4.
L’image suivante montre une expression régulière (\w+)\s\1
et une chaîne de remplacement $1
. L’expression régulière et le modèle de remplacement référencent le premier groupe de capture numéroté automatiquement 1. Lorsque vous choisissez Remplacer tout dans la boîte de dialogue Remplacement rapide dans Visual Studio, les mots répétés sont supprimés du texte.
Conseil
Dans la boîte de dialogue Remplacement rapide, veillez à sélectionner le bouton Utiliser les expressions régulières, ou appuyez sur Alt+E.
Groupes de capture nommés
Au lieu de compter sur la numérotation automatique d’un groupe de capture, vous pouvez lui donner un nom. La syntaxe d’un groupe de capture nommé est (?<name>subexpression)
.
Les groupes de capture nommés, tels que les groupes de capture numérotés, peuvent être utilisés dans l’expression régulière elle-même ou dans un modèle de remplacement. Pour accéder au groupe de capture nommé, tenez compte des exemples suivants :
Dans l’expression régulière: utilisez
\k<name>
. Par exemple,\k<repeated>
dans l’expression régulière(?<repeated>\w+)\s\k<repeated>
fait référence au groupe de capture nommérepeated
et dont la sous-expression est\w+
.Dans un modèle de remplacement: utilisez
${name}
. Par exemple,${repeated}
.
L’image suivante montre une expression régulière (?<repeated>\w+)\s\k<repeated>
et une chaîne de remplacement ${repeated}
. L’expression régulière et le modèle de remplacement référencent le groupe de capture nommé repeated
. Lorsque vous choisissez Remplacer tout dans la boîte de dialogue Remplacement rapide dans Visual Studio, les mots répétés sont supprimés du texte.
Conseil
Veillez à sélectionner le bouton Utiliser des expressions régulières (ou appuyez sur Alt+E) dans la boîte de dialogue Remplacement rapide.
Pour plus d'informations sur les groupes de capture nommés, consultez Sous-expressions mises en correspondance nommées. Pour plus d’informations sur les expressions régulières utilisées dans les modèles de remplacement, consultez Substitutions dans les expressions régulières.
Exemples
Motif | Description |
---|---|
int ([_A-Za-z][_A-Za-z0-9]*) |
Mettre en correspondance des définitions entières uniques. Les identificateurs commencent par une lettre majuscule ou minuscule, suivie de zéro ou plus (indiqué par * ) lettres ou chiffres. L’identificateur est capturé comme $1 par les parenthèses externes. |
(private|internal|public)*\s*([\w]+\s+)int\s+([_A-Za-z][_A-Za-z0-9]*)\s+=\s+[+-]+(\d)+ |
Mettre en correspondance les déclarations entières C# qui sont initialisées en littéraux entiers, en capturant les différentes parties, y compris le niveau d’accès, les modificateurs tels que const ou static , l’identificateur et la valeur définie. Notez l’utilisation de \s+ pour au moins un caractère d’espace blanc, ou \s* si l’espace blanc peut ou non se produire. |
foreach\s*\(([\w\d]*)\s+([\w\d]*)\s+in\s+(.*)\) |
Correspond à la ligne d’ouverture d’une boucle foreach . Les parenthèses littérales sont placées dans une séquence d’échappement avec une barre oblique inverse (\ ). Les différents groupes sont capturés en tant que $1 , $2 et $3 par les parenthèses non placées dans une séquence d’échappement. |
#define\s+([_A-Za-z][_A-Za-z0-9]*) |
Correspond aux définitions #define (sans la valeur, le cas échéant). Le jeton défini est stocké dans $1 . |
#include\s+["<](.*)[">] |
Correspondance inclut dans un fichier source C++. |