Expressions régulières (C++)

La bibliothèque C++ standard prend en charge plusieurs grammaires d’expressions régulières. Cette rubrique décrit les variantes grammaticales disponibles lors de l’utilisation d’expressions régulières.

Grammaire des expressions régulières

La grammaire d’expression régulière à utiliser est spécifiée par l’utilisation de l’une des std::regex_constants::syntax_option_type valeurs d’énumération. Ces grammaires d’expressions régulières sont définies dans std::regex_constants :

  • ECMAScript: Ce qui est le plus proche de la grammaire utilisée par JavaScript et les langages .NET.
  • basic: basic Expressions régulières POSIX ou bre.
  • extended: extended Expressions régulières POSIX ou ERE.
  • awk: C’est le cas extended , mais il contient plus d’échappement pour les caractères non imprimables.
  • grep: C’est le basic tout, mais il autorise également les \n caractères de saut de ligne () à séparer les remplacements.
  • e grep : il s’agit de extended , mais il autorise également les caractères de saut de ligne à séparer les remplacements.

Par défaut, si aucune grammaire n’est spécifiée, ECMAScript est supposé. Une seule grammaire peut être spécifiée.

Plusieurs indicateurs peuvent également être appliqués :

  • icase: Ignorer la casse lors de la correspondance.
  • nosubs: Ignorer les correspondances marquées (c’est-à-dire, les expressions entre parenthèses); aucune substitution n’est stockée.
  • optimize: Rendez la correspondance plus rapide, aux dépens possibles d’une plus grande durée de construction.
  • collate: Utilisez des séquences de classement respectant les paramètres régionaux (par exemple, des plages du formulaire [a-z] ).

Zéro, un ou plusieurs indicateurs peuvent être combinés avec la grammaire pour spécifier le comportement du moteur des expressions régulières. Si seuls les indicateurs sont spécifiés, ECMAScript est considéré comme la grammaire.

Élément

Un élément peut être l’un des éléments suivants :

  • Caractère ordinaire qui correspond au même caractère dans la séquence cible.

  • Caractère générique qui correspond à n’importe quel caractère de la séquence cible, à l’exception d’un saut de ligne.

  • Expression entre crochets de la forme , qui correspond à un caractère ou à un élément de classement dans la séquence cible qui se trouve également dans le jeu défini par l’expression expr , ou de la forme [^expr] , qui correspond à un caractère ou à un élément de classement dans la séquence cible qui n’est pas dans le jeu défini par l’expression expr .

    L’expression expr peut contenir n’importe quelle combinaison des éléments suivants :

    • Un caractère individuel. Ajoute le caractère au jeu défini par expr .

    • Plage de caractères du formulaire . Ajoute les caractères représentés par les valeurs de la plage fermée [ch1, ch2] au jeu défini par expr .

    • Classe de caractères sous la forme . Ajoute les caractères de la classe nommée au jeu défini par expr.

    • Classe d’équivalence de la forme . Ajoute les éléments de classement qui sont équivalents à elt au jeu défini par expr.

    • Symbole de classement du formulaire . Ajoute l'élément de classement elt au jeu défini par expr.

  • Une ancre. ^Le point d’ancrage correspond au début de la séquence cible. $Le point d’ancrage correspond à la fin de la séquence cible.

Un groupe de capture au format (sous-expression) ou \ (sous-expression\) dans et , qui correspond à la séquence de caractères de la séquence cible qui est mise en correspondance par le modèle entre les délimiteurs.

  • Échappement d’identité du formulaire , qui correspond au caractère k de la séquence cible.

Exemples :

  • a correspond à la séquence cible "a" , mais ne correspond pas aux séquences cibles "B" , "b" , ou "c" .

  • . correspond à toutes les séquences cibles "a" ,, "B""b" et "c" .

  • [b-z] correspond aux séquences cibles "b" et "c" ne correspond pas aux séquences cibles "a" ou "B" .

  • [:lower:] correspond aux séquences cibles "a" , "b" et, "c" mais ne correspond pas à la séquence cible "B" .

  • (a) correspond à la séquence cible "a" et associe le groupe de capture 1 à la sous-séquence "a" , mais ne correspond pas aux séquences cibles "B" , "b" , ou "c" .

Dans ECMAScript , basic et grep , un élément peut également être une ECMAScript du formulaire \dd , où dd représente une valeur décimale N qui correspond à une séquence de caractères dans la séquence cible qui est identique à la séquence de caractères qui correspond au nième basic.

Par exemple, (a)\1 correspond à la séquence cible "aa" , car le premier (et unique) groupe de capture correspond à la séquence initiale "a" , puis \1 correspond à la séquence finale "a" .

Dans ECMAScript , un élément peut également être l’un des éléments suivants :

  • Groupe de non capture de la forme ( ?: sous- expression). Correspond à la séquence de caractères de la séquence cible qui correspond au modèle situé entre les délimiteurs.

  • Échappement de format de fichier limité au format ,,, \n\r\t ou \v . Ces derniers correspondent, respectivement, à un saut de page, un saut de ligne, un retour chariot, une tabulation horizontale et une tabulation verticale, dans la séquence cible.

  • Une assertion positive de la forme (= sous- expression). Correspond à la séquence de caractères de la séquence cible qui est mise en correspondance par le modèle situé entre les délimiteurs, mais ne modifie pas la position de correspondance dans la séquence cible.

  • Une assertion négative de la forme ( ! sous- expression). Correspond à n’importe quelle séquence de caractères de la séquence cible qui ne correspond pas au modèle situé entre les délimiteurs, et ne modifie pas la position de la correspondance dans la séquence cible.

  • Séquence d’échappement hexadécimale au format . Correspond à un caractère de la séquence cible qui est représenté par les deux chiffres hexadécimaux hh.

  • Séquence d’échappement Unicode au format . Correspond à un caractère de la séquence cible qui est représenté par les quatre chiffres hexadécimaux hhhh.

  • Séquence d’échappement de contrôle du formulaire . Correspond au caractère de contrôle nommé par le caractère k.

  • Assertion de limite de mot au format . Correspond à la position actuelle dans la séquence cible qui est située immédiatement après une limite de mot.

  • Assertion de limite de mot négative du formulaire . Correspond lorsque la position actuelle dans la séquence cible n’est pas immédiatement après une limite de mot.

  • Caractère d’échappement DSW au format,,,,, \D\s\S\w\W . Fournit un nom court pour une classe de caractères.

Exemples :

  • (?:a) correspond à la séquence cible "a" , mais "(?:a)\1" n’est pas valide, car il n’existe aucun groupe de capture 1.

  • (=a)a correspond à la séquence cible "a" . L’assertion positive correspond à la séquence initiale "a" dans la séquence cible et la dernière "a" dans l’expression régulière correspond à la séquence initiale "a" dans la séquence cible.

  • (!a)a ne correspond pas à la séquence cible "a" .

  • a\b. correspond à la séquence cible "a~" , mais ne correspond pas à la séquence cible "ab" .

  • a\B. correspond à la séquence cible "ab" , mais ne correspond pas à la séquence cible "a~" .

Dans awk , un élément peut également être l’un des éléments suivants :

  • Échappement de format de fichier sous la forme,,,,,, \a\b\f\n\r\t ou \v . Ces derniers correspondent, respectivement, à une barre oblique inverse, une alerte, un retour arrière, un saut de page, un saut de ligne, un retour chariot, une tabulation horizontale et une tabulation verticale, dans la séquence cible.

  • Séquence d’échappement octale sous la forme . Correspond à un caractère de la séquence cible qui est représenté par la valeur ooo d'un, deux ou trois chiffres octaux.

Répétition

Tous les éléments autres qu’une assertion positive, une assertion négative ou une ancre peuvent être suivis par un nombre de répétitions. Le type le plus général de nombre de répétitions prend la forme {min,Max} ou \ {min,Max\} dans et . Un élément qui est suivi par cette forme de nombre de répétitions correspond au moins au minimum d' occurrences consécutives et pas plus que le nombre maximal d’occurrences consécutives d’une séquence qui correspond à l’élément.

Par exemple, a{2,3} correspond à la séquence cible "aa" et à la séquence cible, mais pas à la séquence cible ni à la "aaa""a" séquence cible "aaaa" .

Un nombre de répétitions peut également prendre l'une des formes suivantes :

  • {min} ou \ {min} dans et . Équivaut à {min,min}.

  • {min,} ou \ {min, \} dans et . Équivaut à {min,Unlimited}.

  • * équivaut à {0,*}.

Exemples :

  • a{2} correspond à la séquence cible "aa" , mais pas à la séquence cible ni à la "a" séquence cible "aaa" .

  • a{2,} correspond à la séquence cible "aa" , à la séquence cible "aaa" , etc., mais ne correspond pas à la séquence cible "a" .

  • a* correspond à la séquence cible, à la séquence cible """a" , à la séquence cible "aa" , etc.

Pour toutes les grammaires, sauf basic et grep, un nombre de répétitions peut également prendre l'une des formes suivantes :

  • ? équivaut à {0,1}.

  • + équivaut à {1,+}.

Exemples :

  • a? correspond à la séquence cible "" et à la séquence cible "a" , mais pas à la séquence cible "aa" .

  • a+ correspond à la séquence cible "a" , à la séquence cible "aa" , etc., mais pas à la séquence cible "" .

Dans ECMAScript , toutes les formes de nombre de répétitions peuvent être suivies par le caractère ? qui désigne une ECMAScript.

Concaténation

Les éléments d’expression régulière, avec ou sans nombre de répétitions, peuvent être concaténés pour former de plus longues expressions régulières. L'expression résultante correspond à une séquence cible qui est une concaténation des séquences auxquelles correspondent les éléments.

Par exemple, a{2,3}b correspond à la séquence cible "aab" et à la séquence cible "aaab" , mais ne correspond pas à la séquence cible ou à la "ab" séquence cible "aaaab" .

Alternative

Dans toutes les grammaires d’expressions régulières, à l’exception basic de et grep , une expression régulière concaténée peut être suivie par le caractère | (barre verticale) et une autre expression régulière concaténée. Le nombre d'expressions régulières concaténées pouvant être combinées de cette manière est illimité. L'expression résultante correspond à n'importe quelle séquence cible qui correspond à une ou plusieurs expressions régulières concaténées.

Lorsque plus d’une des expressions régulières concaténées correspondent à la séquence cible, ECMAScript choisit la première des expressions régulières concaténées qui correspond à la séquence comme correspondance, qui sera référencée comme la ECMAScript. Les autres grammaires d’expressions régulières choisissent celle qui atteint la correspondancela plus longue.

Par exemple, ab|cd correspond à la séquence cible "ab" et à la séquence cible "cd" , mais ne correspond pas à la séquence cible ou à la "abd" séquence cible "acd" .

Dans grep et e grep , un caractère de saut de ligne ( \n ) peut être utilisé pour séparer les remplacements.

Sous-expression

Dans basic et grep, une sous-expression est une concaténation. Dans les autres grammaires d'expressions régulières, une sous-expression est une alternative.

Résumé de la grammaire

Le tableau suivant résume les fonctionnalités disponibles dans les différentes grammaires d’expressions régulières :

Élément basic extended ECMAScript grep egrep awk
alternative à l’aide de | + + + +
alternative à l’aide de \n + +
ancre + + + + + +
référence arrière + + +
expression entre crochets + + + + + +
Groupe de capture utilisant () + + + +
Groupe de capture utilisant \(\) + +
séquence Contrôle Échap +
caractère d'échappement dsw +
échappement de format de fichier + +
séquence d'échappement hexadécimale +
échappement d'identité + + + + + +
assertion négative +
assertion négative de limite de mot +
groupe de non capture +
répétition non gourmande +
séquence d'échappement octale +
caractère ordinaire + + + + + +
assertion positive +
répétition à l’aide de {} + + + +
répétition à l’aide de \{\} + +
répétition à l’aide de * + + + + + +
répétition à l’aide ? de et + + + + +
séquence d'échappement Unicode +
caractère générique + + + + + +
assertion de limite de mot +

Détails sémantiques

Ancre

Une ancre correspond à une position dans la chaîne cible, et non à un caractère. Un ^ correspond au début de la chaîne cible et un $ correspond à la fin de la chaîne cible.

Référence arrière

Une référence arrière est une barre oblique inverse suivie par une valeur décimale N. Elle correspond au contenu du Nième groupe de capture. La valeur N ne doit pas dépasser le nombre de groupes de capture qui précèdent la référence arrière. Dans basic et grep, la valeur N est déterminée par le chiffre décimal qui suit la barre oblique inverse. Dans ECMAScript, la valeur N est déterminée par le nombre total de chiffres décimaux qui suivent immédiatement la barre oblique inverse. Par conséquent, dans basic et grep, la valeur N n'est jamais supérieure à 9, même si l'expression régulière contient plus de neuf groupes de capture. Dans ECMAScript, la valeur N est illimitée.

Exemples :

  • ((a+)(b+))(c+)\3 correspond à la séquence cible "aabbbcbbb" . La référence arrière \3 correspond au texte du troisième groupe de capture, c’est-à-dire, "(b+)" . Elle ne correspond pas à la séquence cible "aabbbcbb" .

  • (a)\2 n’est pas valide.

  • (b(((((((((a))))))))))\10 a des significations différentes dans basic et dans ECMAScript . Dans basic , la référence arrière est \1 . La référence arrière correspond au contenu du premier groupe de capture (autrement dit, celui qui commence par (b et se termine par le final et précède la ) référence arrière), et le final 0 correspond au caractère ordinaire 0 . Dans ECMAScript , la référence arrière est \10 . Elle correspond au dixième groupe de capture, c'est-à-dire, le plus profond.

Expression entre crochets

Une expression entre crochets définit un jeu de caractères et des éléments de classement. Lorsque l’expression entre crochets commence par le caractère dont ^ la correspondance est établie, si aucun élément du jeu ne correspond au caractère actuel de la séquence cible. Sinon, la correspondance aboutit si l'un des éléments du jeu correspond au caractère actuel de la séquence cible.

Le jeu de caractères peut être défini en spécifiant une combinaison de caractères individuels, de plages de caractères, de classes de caractères, de classes d’équivalence et de symboles de classement.

Groupe de capture

Un groupe de capture marque son contenu en tant qu'unité dans la grammaire d'expressions régulières, et étiquette le texte cible qui correspond à son contenu. Le nom associé à chaque groupe de capture est un nombre, qui est déterminé par le nombre de parenthèses ouvrantes qui marquent les groupes de capture jusqu'à la parenthèse ouvrante (incluse) qui marque le groupe de capture actuel. Dans cette implémentation, le nombre maximal de groupes de capture est 31.

Exemples :

  • ab+ correspond à la séquence cible "abb" , mais ne correspond pas à la séquence cible "abab" .

  • (ab)+ ne correspond pas à la séquence cible "abb" , mais correspond à la séquence cible "abab" .

  • ((a+)(b+))(c+) correspond à la séquence cible "aabbbc" et associe le groupe de capture 1 à la sous-séquence "aabbb" , le groupe de capture 2 à la sous-séquence, le "aa" groupe de capture 3 avec "bbb" et le groupe de capture 4 à la sous-séquence "c" .

Classe de caractères

Dans une expression entre crochets, une classe de caractères ajoute tous les caractères de la classe nommée au jeu de caractères défini par l'expression entre crochets. Pour créer une classe de caractères, utilisez [: suivi du nom de la classe, suivi de :] .

En interne, les noms des classes de caractères sont identifiés par l'appel à id = traits.lookup_classname. Un caractère ch appartient à une telle classe si traits.isctype(ch, id) retourne true. Le modèle regex_traits par défaut prend en charge les noms de classes répertoriés dans le tableau suivant.

Nom de la classe Description
alnum minuscules, majuscules et chiffres
alpha minuscules et majuscules
blank espace ou tabulation
cntrl caractères d’échappement de format de fichier
digit chiffres
graph minuscules, majuscules, chiffres et ponctuation
lower minuscules
print minuscules, majuscules, chiffres, ponctuation et espaces
punct ponctuation
space espace
upper majuscules
xdigit chiffres,,,,,, abcdef , A , B , C , D , E , F
d identique à digit
s identique à space
w identique à alnum

Plage de caractères

Dans une expression entre crochets, une plage de caractères ajoute tous les caractères de la plage au jeu de caractères défini par l'expression entre crochets. Pour créer une plage de caractères, placez le caractère '-' entre le premier et le dernier caractère de la plage. Une plage de caractères place tous les caractères ayant une valeur numérique supérieure ou égale à la valeur numérique du premier caractère, et inférieure ou égale à la valeur numérique du dernier caractère, dans le jeu. Notez que ce jeu de caractères ajoutés dépend de la représentation de caractères spécifique à la plateforme. Si le caractère '-' se trouve au début ou à la fin d’une expression entre crochets, ou en tant que premier ou dernier caractère d’une plage de caractères, il se représente lui-même.

Exemples :

  • [0-7] représente le jeu de caractères { 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 }. Il correspond aux séquences cibles "0" , "1" , etc., mais pas à "a" .

  • Sur les systèmes qui utilisent l’encodage de caractères ASCII, [h-k] représente le jeu de caractères { h , i , j , k }. Il correspond aux séquences cibles "h" , "i" , et ainsi de suite, mais pas à "\x8A" ou "0" .

  • Sur les systèmes qui utilisent l’encodage de caractères EBCDIC, [h-k] représente le jeu de caractères { h , i ,, '\x8A''\x8B' , '\x8C' , '\x8D' , '\x8E' , '\x8F' , '\x90' , j , k } ( h est encodé en tant que 0x88 et k est encodé sous la forme 0x92 ). Il correspond aux séquences cibles "h" , "i" , "\x8A" , etc., mais pas à "0" .

  • [-0-24] représente le jeu de caractères { - , 0 , 1 , 2 , 4 }.

  • [0-2-] représente le jeu de caractères { 0 , 1 , 2 , - }.

  • Sur les systèmes qui utilisent l’encodage de caractères ASCII, [+--] représente le jeu de caractères { +,- }.

Toutefois, lorsque des plages respectant les paramètres régionaux sont utilisées, les caractères d'une plage sont déterminés par les règles de classement des paramètres régionaux. Les caractères qui sont classés après le premier caractère de la définition de la plage et avant le dernier caractère de la définition de la plage se trouvent dans le jeu. Les deux caractères de fin sont également dans le jeu.

Élément de classement

Un élément de classement est une séquence de plusieurs caractères qui est traitée comme un caractère unique.

Symbole de classement

Un symbole de classement d’une expression entre crochets ajoute un élément de classement au jeu défini par l’expression entre crochets. Pour créer un symbole de classement, utilisez [. suivi de l’élément de classement, suivi de .]

Séquence de contrôle d’échappement

Une séquence d’échappement de contrôle est une barre oblique inverse suivie de la lettre 'c' suivie de l’une des lettres 'a' par 'z' ou 'A''Z' . Correspond au caractère de contrôle ASCII nommé par la lettre. Par exemple, "\ci" correspond à la séquence cible "\x09" , car Ctrl + I a la valeur 0x09 .

Caractère d’échappement DSW

Un caractère d'échappement dsw est un nom court donné à une plage de caractères, comme indiqué dans le tableau suivant.

Séquence d'échappement Classe nommée équivalente Classe nommée par défaut
\d [[:d:]] [[:digit:]]
\D [^[:d:]] [^[:digit:]]
\s [[:s:]] [[:space:]]
\S [^[:s:]] [^[:space:]]
\w [[:w:]] [a-zA-Z0-9_]*
\W [^[:w:]] [^a-zA-Z0-9_]*

* jeu de caractères ASCII

Classe d’équivalence

Dans une expression entre crochets, une classe d’équivalence ajoute au jeu défini par l’expression entre crochets, tous les caractères et éléments de classement équivalents à l’élément de classement dans la définition de classe d’équivalence.

Pour créer une classe d’équivalence, utilisez [= suivi d’un élément de classement suivi de =] . En interne, les deux éléments de classement elt1 et elt2 sont équivalents si traits.transform_primary(elt1.begin(), elt1.end()) == traits.transform_primary(elt2.begin(), elt2.end()).

Échappement de format de fichier

Un échappement de format de fichier se compose des séquences d’échappement de caractère de langage C habituelles,,,,,, \\\a\b\f\n\r , \t , \v . Il s’agit des significations habituelles, c’est-à-dire, les barres obliques, les alertes, les retours arrière, les sauts de forme, les sauts de ligne, les retours chariot, les tabulations horizontales et les tabulations verticales. Dans ECMAScript , \a et \b ne sont pas autorisés. ( \\ est autorisé, mais il s’agit d’un échappement d’identité, et non d’une séquence d’échappement de format de fichier).

Séquence d’échappement hexadécimale

Une séquence d’échappement hexadécimale est une barre oblique inverse suivie de la lettre x suivie de deux chiffres hexadécimaux ( 0-9a-fA-F ). Elle correspond à un caractère dans la séquence cible dont la valeur est spécifiée par les deux chiffres.

Par exemple, "\x41" correspond à la séquence cible "a" lorsque l’encodage de caractères ASCII est utilisé.

Échappement d’identité

Un échappement d'identité est une barre oblique inverse suivie d'un caractère unique. Elle correspond à ce caractère. Il est requis lorsque le caractère a une signification particulière. L’utilisation de l’échappement d’identité supprime la signification particulière. Par exemple :

  • a* correspond à la séquence cible "aaa" , mais ne correspond pas à la séquence cible "a*" .

  • a\* ne correspond pas à la séquence cible "aaa" , mais correspond à la séquence cible "a*" .

Le jeu de caractères autorisés dans un échappement d'identité dépend de la grammaire d'expression régulière, comme indiqué dans le tableau suivant.

Grammaire Caractères autorisés d'échappement d'identité
basic, grep { (){}.[\*^$ }
extended, egrep { (){.[\*^$+?| }
awk, extended plus { "/ }
ECMAScript Tous les caractères à l'exception de ceux pouvant faire partie d'un identificateur. En général, cela comprend les lettres, les chiffres,, $_ et les séquences d’échappement Unicode. Pour plus d’informations, consultez la ECMAScript spécification du langage.

Caractère individuel

Dans une expression entre crochets, un caractère individuel ajoute ce caractère au jeu de caractères défini par l'expression entre crochets. N’importe où dans une expression entre crochets, à l’exception du début, un se ^ représente lui-même.

Exemples :

  • [abc] correspond aux séquences cibles "a" , "b" , et "c" , mais pas à la séquence "d" .

  • [^abc] correspond à la séquence cible "d" , mais pas aux séquences cibles "a" , "b" , ou "c" .

  • [a^bc] correspond aux séquences cibles "a" , "b" , "c" et "^" , mais pas à la séquence cible "d" .

Dans toutes les grammaires d’expressions régulières, à l’exception de ECMAScript , si a ] est le premier caractère qui suit l’ouverture [ ou est le premier caractère qui suit un initial ^ , il se représente lui-même.

Exemples :

  • []a n’est pas valide, car il n’y a pas ] de fin pour l’expression entre crochets.

  • []abc] correspond aux séquences cibles "a" , "b" , "c" et "]" , mais pas à la séquence cible "d" .

  • [^]abc] correspond à la séquence cible "d" , mais pas aux séquences cibles,, "a""b""c" ou "]" .

Dans ECMAScript , utilisez \] pour représenter le caractère ] dans une expression entre crochets.

Exemples :

  • []a correspond à la séquence cible "a" , car l’expression entre crochets est vide.

  • [\]abc] correspond aux séquences cibles "a" , "b" , "c" et, "]" mais pas à la séquence cible "d" .

Assertion négative

Une assertion négative peut représenter n'importe quel élément, à l'exception de son contenu. Elle ne consomme pas les caractères de la séquence cible.

Par exemple, (!aa)(a*) correspond à la séquence cible "a" et associe le groupe de capture 1 à la sous-séquence "a" . Elle ne correspond pas à la séquence cible "aa" ou à la séquence cible "aaa" .

Assertion négative de limite de mot

Une assertion de limite de mot négative correspond si la position actuelle dans la chaîne cible n’est pas immédiatement après une limite de mot.

Groupe sans capture

Un groupe sans capture marque son contenu en tant qu’unité unique dans la grammaire d’expression régulière, mais n’étiquette pas le texte cible.

Par exemple, (a)(?:b)*(c) correspond au texte cible "abbc" et associe le groupe de capture 1 à la sous-séquence "a" et le groupe de capture 2 à la sous-séquence "c" .

Répétition non gourmande

Une répétition non gourmande consomme la sous-séquence la plus courte de la séquence cible qui correspond au modèle. Une répétition gourmande consomme la sous-séquence la plus longue. Par exemple, (a+)(a*b) correspond à la séquence cible "aaab" .

Lorsqu’une répétition non gourmande est utilisée, elle associe le groupe de capture 1 à la sous-séquence "a" au début de la séquence cible et le groupe de capture 2 à la sous-séquence "aab" à la fin de la séquence cible.

Quand une correspondance gourmande est utilisée, elle associe le groupe de capture 1 à la sous-séquence "aaa" et le groupe de capture 2 à la sous-séquence "b" .

Séquence d’échappement octale

Une séquence d'échappement octale est une barre oblique inverse suivie de un, deux ou trois chiffres octaux (0-7). Elle correspond à un caractère dans la séquence cible dont la valeur est spécifiée par ces chiffres. Si tous les chiffres sont 0 , la séquence n’est pas valide.

Par exemple, \101 correspond à la séquence cible "a" lorsque l’encodage de caractères ASCII est utilisé.

Caractère ordinaire

Un caractère ordinaire est un caractère valide qui n’a pas de signification spéciale dans la grammaire actuelle.

Dans ECMAScript, les caractères suivants ont une signification particulière :

  • ^ $ \ . * + ? ( ) [ ] { } |

Dans basic et grep, les caractères suivants ont une signification particulière :

  • . [ \

En outre basic , dans et grep , les caractères suivants ont une signification particulière lorsqu’ils sont utilisés dans un contexte particulier :

  • * a une signification spéciale dans tous les cas, sauf lorsqu’il s’agit du premier caractère d’une expression régulière ou du premier caractère qui suit un initial ^ dans une expression régulière, ou lorsqu’il s’agit du premier caractère d’un groupe de capture ou du premier caractère qui suit un initial ^ dans un groupe de capture.

  • ^ a une signification particulière lorsqu’il s’agit du premier caractère d’une expression régulière.

  • $ a une signification particulière lorsqu’il s’agit du dernier caractère d’une expression régulière.

Dans extended , e grep et awk , les caractères suivants ont une signification particulière :

  • . [ \ ( * + ? { |

En outre, dans extended , e grep et awk , les caractères suivants ont une signification particulière lorsqu’ils sont utilisés dans un contexte particulier.

  • ) a une signification particulière lorsqu’il correspond à un précédent (

  • ^ a une signification particulière lorsqu’il s’agit du premier caractère d’une expression régulière.

  • $ a une signification particulière lorsqu’il s’agit du dernier caractère d’une expression régulière.

Un caractère ordinaire correspond au même caractère situé dans la séquence cible. Par défaut, cela signifie que la correspondance aboutit si les deux caractères sont représentés par la même valeur. Dans une correspondance respectant la casse, les deux caractères ch0 et ch1 correspondent si traits.translate_nocase(ch0) == traits.translate_nocase(ch1). Dans une correspondance respectant les paramètres régionaux, les deux caractères ch0 et ch1 correspondent si traits.translate(ch0) == traits.translate(ch1).

Assertion positive

Une assertion positive correspond à son contenu, mais ne consomme pas les caractères de la séquence cible.

Exemples :

  • (=aa)(a*) correspond à la séquence cible "aaaa" et associe le groupe de capture 1 à la sous-séquence "aaaa" .

  • (aa)(a*) correspond à la séquence cible "aaaa" et associe le groupe de capture 1 à la sous-séquence "aa" au début de la séquence cible, et le groupe de capture 2 à la sous-séquence "aa" à la fin de la séquence cible.

  • (=aa)(a)|(a) correspond à la séquence cible "a" et associe le groupe de capture 1 à une séquence vide (car l’assertion positive a échoué) et le groupe de capture 2 à la sous-séquence "a" . Il correspond également à la séquence cible "aa" et associe le groupe de capture 1 à la sous-séquence "aa" et au groupe de capture 2 avec une séquence vide.

Séquence d’échappement Unicode

Une séquence d’échappement Unicode est une barre oblique inverse suivie de la lettre 'u' suivie de quatre chiffres hexadécimaux ( 0-9a-fA-F ). Elle correspond à un caractère dans la séquence cible dont la valeur est spécifiée par les quatre chiffres. Par exemple, \u0041 correspond à la séquence cible "a" lorsque l’encodage de caractères ASCII est utilisé.

Caractère générique

Un caractère générique correspond à n'importe quel caractère de l'expression cible, à l'exception du saut de ligne.

Limite de mot

Une limite de mot apparaît dans les situations suivantes :

  • Le caractère actuel se situe au début de la séquence cible, et fait partie des caractères alphabétiques A-Za-z0-9_

  • Le caractère actuel se situe après la fin de la séquence cible, et le dernier caractère de la séquence cible est l'un des caractères alphabétiques.

  • Le caractère actuel est l’un des caractères alphabétiques et le caractère précédent ne l’est pas.

  • Le caractère actuel n’est pas l’un des caractères alphabétiques et le caractère précédent est.

Assertion de limite de mot

Une assertion de limite de mot aboutit si la position actuelle dans la chaîne cible est située immédiatement après une limite de mot.

Correspondance et recherche

Pour qu'une expression régulière corresponde à une séquence cible, l'expression régulière dans son intégralité doit correspondre à la séquence cible dans son intégralité. Par exemple, l’expression régulière bcd correspond à la séquence cible "bcd" , mais ne correspond pas à la séquence cible "abcd" ni à la séquence cible "bcde" .

Pour qu'une recherche d'expression régulière aboutisse, la séquence cible doit contenir une sous-séquence qui corresponde à l'expression régulière. En général, la recherche trouve la sous-séquence correspondante située la plus à gauche.

Exemples :

  • Une recherche de l’expression régulière bcd dans la séquence cible est "bcd" réussie et correspond à la séquence entière. La même recherche dans la séquence cible est "abcd" également effectuée et correspond aux trois derniers caractères. La même recherche dans la séquence cible est "bcde" également effectuée et correspond aux trois premiers caractères.

  • Une recherche de l’expression régulière bcd dans la séquence cible est "bcdbcd" réussie et correspond aux trois premiers caractères.

S’il y a plus d’une sous-séquence qui correspond à un emplacement de la séquence cible, il existe deux façons de choisir le modèle correspondant.

La première correspondance choisit la sous-séquence qui a été trouvée en premier parmi les correspondances avec l’expression régulière.

La correspondance la plus longue choisit la sous-séquence la plus longue parmi les correspondances trouvées à cet emplacement. S’il y a plusieurs sous-séquences ayant la longueur maximale, la correspondance la plus longue choisit celle qui a été trouvée en premier.

Par exemple, lorsque la première correspondance est utilisée, une recherche de l’expression régulière b|bc dans la séquence cible "abcd" correspond à la sous-séquence, "b" car le terme de gauche de l’alternative correspond à cette sous-séquence. par conséquent, la première correspondance n’essaie pas le terme de droite de l’alternative. Lorsque la correspondance la plus longue est utilisée, la même recherche correspond à "bc" car "bc" est plus long que "b" .

Une correspondance partielle aboutit si la correspondance atteint la fin de la séquence cible sans échouer, même si elle n’a pas atteint la fin de l’expression régulière. Par conséquent, après la réussite d'une correspondance partielle, l'ajout de caractères à la séquence cible peut entraîner l'échec de la prochaine correspondance partielle. Toutefois, après l’échec d’une correspondance partielle, l’ajout de caractères à la séquence cible ne peut pas provoquer la fin d’une correspondance partielle ultérieure. Par exemple, avec une correspondance partielle, ab correspond à la séquence cible, "a" mais pas à "ac" .

Indicateurs de format

ECMAScript Règles de format Règles de format sed Texte de remplacement
$& & Séquence de caractères qui correspond à l’intégralité de l’expression régulière : [match[0].first, match[0].second)
$$ $
\& &
$`" (signe dollar suivi d’un guillemet précédent) Séquence de caractères qui précède la sous-séquence qui correspond à l’expression régulière : [match.prefix().first, match.prefix().second)
$'" (signe dollar suivi d’un guillemet) Séquence de caractères qui suit la sous-séquence qui correspond à l’expression régulière : [match.suffix().first, match.suffix().second)
$n \n Séquence de caractères qui correspond au groupe de capture à la position n , où n est un nombre compris entre 0 et 9 : [match[n].first, match[n].second)
\\n \n
$nn Séquence de caractères qui correspond au groupe de capture à la position nn , où nn est un nombre compris entre 10 et 99 : [match[nn].first, match[nn].second)

Voir aussi

Vue d’ensemble de la bibliothèque standard C++