Syntaxe expression régulière 2 (re2.h)

Les expressions régulières sont une notation permettant de décrire des jeux de chaînes de caractères. Lorsqu’une chaîne se trouve dans le jeu décrit par une expression régulière, nous disons que l’expression régulière correspond à la chaîne.

L’expression régulière la plus simple est un caractère littéral unique. À l’exception des métacaractères tels que *+?()|, les caractères correspondent eux-mêmes. Pour mettre en correspondance un métacharacteur, échappez-le avec une barre oblique inverse. Par exemple, \+ correspond au caractère littéral plus.

Deux expressions régulières peuvent être modifiées ou concaténées pour former une nouvelle expression régulière : si e1 correspond à s et e2 correspond à t, e1 | e2 correspond à s ou t, et e1e2 correspond à st.

Les métacharacteurs *, +et ? sont des opérateurs de répétition : e1* correspond à une séquence de zéro ou plusieurs chaînes (éventuellement différentes), chacune correspondant à e1 ; e1+ correspond à un ou plusieurs ; e1? correspond à zéro ou à un.

La priorité de l’opérateur, de la liaison la plus faible à la plus forte, est la suivante :

  • Alternance
  • Concaténation
  • opérateurs de répétition

Les parenthèses explicites peuvent être utilisées pour forcer des significations différentes, comme dans les expressions arithmétiques. Quelques exemples : ab|cd équivaut à (ab)|(cd) ; ab\ équivaut à a(b\).

La syntaxe décrite jusqu'à présent est la plupart de la syntaxe traditionnelle d'expression régulière Unix egrep. Ce sous-ensemble suffit pour décrire toutes les langues régulières. Une langue normale est un ensemble de chaînes qui peuvent être mises en correspondance en une seule passe du texte à l’aide d’une quantité fixe de mémoire. De nouvelles fonctionnalités d’expression régulière (notamment Perl et les langages qui l’ont copié) ont ajouté de nombreux nouveaux opérateurs et séquences d’échappement. Ces modifications rendent les expressions régulières plus concises et parfois plus cryptiques, mais pas plus puissantes.

Cette page répertorie la syntaxe de l’expression régulière acceptée par RE2.

Il répertorie également certaines syntaxes acceptées par PCRE, PERL et VIM.

Tables de syntaxe

Types d’expressions à un seul caractère Exemples
tout caractère, éventuellement avec une nouvelle ligne (s=true) .
classe de caractères [xyz]
classe de caractères inversée [^xyz]
Classe de caractères perl (lien) \d
classe de caractères perl inversée \D
Classe de caractères ASCII (lien) [[:alpha:]]
classe de caractères ASCII inversée [[:^alpha:]]
Classe de caractères Unicode (nom à une lettre) \pN
Classe de caractères Unicode \p{Greek}
classe de caractères Unicode inversée (nom à une lettre) \PN
classe de caractères Unicode inversée \P{Greek}
  Composites
xy x suivi par y
x|y x ou y (de préférence x)
  Répétitions
x* zéro ou plus x, préférer plus
x+ zéro ou plus x, préférer plus
x? zéro ou un x, préférer un
x{n,m} n ou n + 1 ou... ou m x, préférer plus
x{n,} zéro ou plus x, préférer plus
x{n} exactement n x
X*? zéro ou plus x, préférer moins
x+? un ou plus x, préférer moins
x?? zéro ou un x, préférer zéro
x{n,m}? n ou n + 1 ou... ou m x, préférer moins
x{n,}? n ou plus x, préférer moins
x{n,}? exactement n x
x{} (≡ x*) (NON PRIS EN CHARGE) VIM
x{-} (≡ x* ?) (NON PRIS EN CHARGE) VIM
x{-n} (≡ x{n}?) (NON PRIS EN CHARGE) VIM
x= (≡ x?) (NON PRIS EN CHARGE) VIM

Restriction d’implémentation : les formulaires x{n,m}de comptage , x{n,}et x{n} les formulaires de rejet qui créent un nombre de répétitions minimal ou maximal supérieur à 1 000. Les répétitions illimitées ne sont pas sujettes à cette restriction.

  Répétitions de possession
x*+ zéro ou plus x, possession (NON PRIS EN CHARGE)
x++ un ou plus x, possession (NON PRIS EN CHARGE)
x?+ zéro ou un x, possession (NON PRIS EN CHARGE)
x{n,m}+ n ou ... ou m x, possession (NON PRIS EN CHARGE)
x{n,}+ n ou plus x, possession (NON PRIS EN CHARGE)
x{n}+ exactement n x, possession (NON PRIS EN CHARGE)
  Regroupement
(re) Groupe de capture numéroté (sous-correspondance)
(?P<nom>re) nommé & groupe de capture numéroté (sous-correspondance)
(?<nom>re) nommé & groupe de capture numéroté (sous-correspondance) (NON PRIS EN CHARGE)
(?' name’re) nommé & groupe de capture numéroté (sous-correspondance) (NON PRIS EN CHARGE)
(?:re) groupe non capturé
(?flags) activer les indicateurs dans le groupe actuel ; non capture
(?flags:re) définir des indicateurs pendant un re ; non capture
(?#text) Commentaire (NON PRIS EN CHARGE)
(?|x|y|z) réinitialisation de la numérotation des branches (NON PRIS EN CHARGE)
(?>re) correspondance de possession de re (NON PRIS EN CHARGE)
re@> correspondance de possession de re (NON PRIS EN CHARGE) VIM
%(re) groupe de non capture (NON PRIS EN CHARGE) VIM
  Flags
i non respect de la casse (valeur par défaut faux)
m mode multilignes : ^ et $ correspondent ligne début/fin en plus du texte début/fin (valeur par défaut faux)
s let . correspondre à \n (valeur par défaut faux)
U ungreedy : permuter la signification de x* et x* ?, x+ et x+ ?, etc. (valeur par défaut false)

La syntaxe de l’indicateur est xyz (set) ou -xyz (clear) ou xy-z (set xy, clear z).

  Chaînes vides
^ au début d’un texte ou d’une ligne (m = vrai)
$ à la fin du texte (comme \z non \z) ou ligne (m = vrai)
\A au début du texte
\b à la limite de mot ASCII (\w d’un côté et \W, \A ou \Z de l’autre)
\B non au niveau de la limite de mot ASCII
\g au début du sous-texte recherché (NON PRIS EN CHARGE) PCRE
\G à la fin de la dernière correspondance (NON PRIS EN CHARGE) PERL
\Z à la fin du texte ou avant le saut de ligne à la fin du texte (NON PRIS EN CHARGE)
\z à la fin du texte
(?=re) avant la correspondance de texte re (NON PRIS EN CHARGE)
(?!re) avant le texte ne correspondant pas re (NON PRIS EN CHARGE)
(?<=re) après la correspondance de texte re (NON PRIS EN CHARGE)
(?<!re) après le texte ne correspondant pas re (NON PRIS EN CHARGE)
re& avant la correspondance de texte re (NON PRIS EN CHARGE) VIM
re@= avant la correspondance de texte re (NON PRIS EN CHARGE) VIM
re@! avant le texte ne correspondant pas re (NON PRIS EN CHARGE) VIM
<re@= après la correspondance de texte re (NON PRIS EN CHARGE) VIM
re@<! après le texte ne correspondant pas re (NON PRIS EN CHARGE) VIM
\zs définit le début de la correspondance (= \K) (NON PRIS EN CHARGE) VIM
\ze définit la fin de la correspondance (NON PRIS EN CHARGE) VIM
\%^ le début d’un fichier (NON PRIS EN CHARGE) VIM
\%$ la fin d’un fichier (NON PRIS EN CHARGE) VIM
\%V à l’écran (NON PRIS EN CHARGE) VIM
\%# position du curseur (NON PRIS EN CHARGE) VIM
\%'m position de la marque m (NON PRIS EN CHARGE) VIM
\%23l à la ligne 23 (NON PRIS EN CHARGE) VIM
\%23c dans la colonne 23 (NON PRIS EN CHARGE) VIM
\%23v dans la colonne virtuelle 23 (NON PRIS EN CHARGE) VIM
  Séquences d’échappement
\a bell (≡ \007)
\f flux de formulaire (≡ \014)
\t onglet horizontale (≡ \011)
\n nouvelle ligne (≡ \012)
\r retour chariot (≡ \015)
\v caractère d’onglet verticale (≡ \013)
* littéral *, pour tout caractère de ponctuation *
\123 code de caractère octal (quatre chiffres au maximum)
\x7F code de caractère hex (exactement deux chiffres)
\x{10FFFF} code de caractère hex
\C correspondre un seul octet même en mode UTF-8
\Q...\E texte littéral ... même si ... avec ponctuation
\1 rétro-référence (NON PRIS EN CHARGE)
\b retour arrière (NON PRIS EN CHARGE) (utiliser \010)
\cK caractère de contrôle ^ K (NON PRIS EN CHARGE) (utiliser \001 etc)
\e échap (NON PRIS EN CHARGE) (utiliser \033)
\g1 rétro-référence (NON PRIS EN CHARGE)
\g{1} rétro-référence (NON PRIS EN CHARGE)
\g{+1} rétro-référence (NON PRIS EN CHARGE)
\g{-1} rétro-référence (NON PRIS EN CHARGE)
\g{name} rétro-référence nommé (NON PRIS EN CHARGE)
\g<name> appel de sous-routine (NON PRIS EN CHARGE)
\g’name' appel de sous-routine (NON PRIS EN CHARGE)
\k<name> rétro-référence nommé (NON PRIS EN CHARGE)
\k’name' rétro-référence nommé (NON PRIS EN CHARGE)
\lX X minuscule (NON PRIS EN CHARGE)
\ux X majuscule (NON PRIS EN CHARGE)
\L...\E texte en minuscules... (NON PRIS EN CHARGE)
\K réinitialiser le début de $0 (NON PRIS EN CHARGE)
\N{name} caractère Unicode nommé (NON PRIS EN CHARGE)
\R saut de ligne (NON PRIS EN CHARGE)
\U...\E texte en minuscules ... (NON PRIS EN CHARGE)
\X séquence Unicode étendue (NON PRIS EN CHARGE)
%d123 caractère décimal 123 (NON PRIS EN CHARGE) VIM
%xFF caractère hexadécimale FF (NON PRIS EN CHARGE) VIM
%o123 caractère octal 123 (NON PRIS EN CHARGE) VIM
%u1234 caractère Unicode 0x1234 (NON PRIS EN CHARGE) VIM
%U12345678 caractère Unicode 0x12345678 (NON PRIS EN CHARGE) VIM
  Éléments de classe de caractères
x caractère unique
A-Z plage de caractères (incluse)
\d Classe de caractères perl
[:foo:] Classe de caractères ASCII foo
\p{Foo} Classe de caractères Unicode Foo
\pF Classe de caractères Unicode F (nom à une lettre)
  Classes de caractères nommés comme éléments de classe de caractères
[\d] chiffres (≡ \d)
[^\d] pas de chiffres (≡ \d)
[\D] pas de chiffres (≡ \d)
[^\D] non pas de chiffres (≡ \d)
[[:name:]] classe ASCII nommée à l’intérieur d’une classe de caractères (≡ [:name:])
[^ [ : nom :]] classe ASCII nommée à l’intérieur d’une classe de caractères inversée (≡ [:name:])
[\p{Name}] propriété Unicode nommée dans la classe de caractères (≡ \p{Name})
[^\p{Name}] propriété Unicode nommée dans la classe de caractères inversée (≡ \P{Name})
Classes de caractères perl (tout ASCII uniquement)
\d chiffres (≡ [0-9])
\D pas de chiffres (≡ [^0-9])
\s espace blanc (≡ [\t\n\f\r])
\S pas d’espace blanc (≡ [\t\n\f\r])
\w caractères de mot (≡ [0-9A-Za-z_])
\W caractères non word (≡ [^0-9A-Za-z_])
\h espace horizontal (NON PRIS EN CHARGE)
\H pas d’espace horizontal (NON PRIS EN CHARGE)
\v espace vertical (NON PRIS EN CHARGE)
\V pas d’espace vertical (NON PRIS EN CHARGE)
classes de caractères ASCII
[[:alnum:]] alphanumérique (≡ [0-9A-za-z])
[[:alpha:]] alphabétique (≡ [A-Za-z])
[[:ascii:]] ASCII (≡ [\x00-\x7F])
[[:blank:]] vide (≡ [\t])
[[:cntrl:]] control (≡ [\x00-\x1F\x7F])
[[:digit:]] chiffres (≡ [0-9])
[[:graph:]] graphique (≡ [!-~][A-Za-z0-9!&quot;#$%&amp;&#39;()\*+,\-./:;&lt;=&gt;?@[\\\]^_` {\|}~])
[[:lower:]] minuscule (≡ [a-z])
[[:print:]] imprimable (≡ [-~] ≡ [[:graph:]])
[[:punct:]] ponctuation (≡ [!-/:-@[-`{-~])
[[:space:]] espace blanc (≡ [\t\n\v\f\r])
[[:upper:]] majuscule (≡ [A-Z])
[[:word:]] caractères de mot (≡ [0-9A-Za-z_])
[[:xdigit:]] chiffre hexadécimal (≡ [0-9A-Fa-f])
  Noms de classe de caractères Unicode--catégorie général
C Autre
Cc control
Cf Format
Cn points de codes non assignés (NON PRIS EN CHARGE)
Co usage privé
Cs suppléant
L lettre
LC lettre en majuscules (NON PRIS EN CHARGE)
L& lettre en majuscules (NON PRIS EN CHARGE)
Ll lettres minuscules
Lm lettre modificative
Lo autre lettre
Lt lettre de titre
Lu lettres majuscules
M marque
Mc marque d'espacement
Me marque englobante
Mn marque de non-espacement
N nombre
Nd nombre décimal
Nl numéro de lettre
Non autre nombre
P ponctuation
Pc ponctuation de connecteur
Pd ponctuation de tirets
Pe ponctuation rapprochée
Pf ponctuation finale
Pi ponctuation initiale
Po autre ponctuation
Ps ponctuation ouverte
S symbol
Sc symbole de devise
Sk symbole modificateur
Sm symbole mathématique
So autre symbole
Z séparateur
Zl séparateur de ligne
Zp séparateur de paragraphe
Zs séparateur d’espace
Noms de classe de caractères Unicode--scripts
Adlam
Ahom
Anatolian_Hieroglyphs
Arabe
Arménien
Avestan
Balinais
Bamoum
Bassa_Vah
Batik
Bengali
Bhaiksuki
Bopomofo
Brahma
Braille
Bugi
Bouhid
Canadian_Aboriginal
Carien
Caucasian_Albanian
Chakma
Cham
Cherokee
Chorasmian
Commun
Copte
Cunéiforme
Cypriot
Cyrillic
Déseret
Dévanâgarî
Dives_Akuru
Dogra
Duployan
Egyptian_Hieroglyphs
Elbasan
Elymaic
Éthiopien
Géorgien
Glagolitique
Gothique
Grantha
Grec
Goudjarati
Gunjala_Gondi
Gurmukhi
Han
Hangul
Hanifi_Rohingya
Hanounóo
Hatran
Hébreu
Hiragana
Imperial_Aramaic
Hérité
Inscriptional_Pahlavi
Inscriptional_Parthian
Javanais
Kaithi
Kannada
Katakana
Kayah_Li
Kharoshthi
Khitan_Small_Script
Khmer
Khojki
Khudawadi
Lao
Latin
Lepcha
Limbu
Linear_A
Linear_B
Lisu
Lycien
Lydien
Mahajani
Makasar
Malayalam
Mandéen
Manichéen
Marchen
Masaram_Gondi
Medefaidrin
Meetei_Mayek
Mende_Kikakui
Meroitic_Cursive
Meroitic_Hieroglyphs
Miao
Modi
Mongole
Mro
Multani
Myanmar
Nabataean
Nandinagari
New_Tai_Lue
Newa
Nko
Nushu
Nyiakeng_Puachue_Hmong
Ogham
Ol_Chiki
Old_Hungarian
Old_Italic
Old_North_Arabian
Old_Permic
Old_Persian
Old_Sogdian
Old_South_Arabian
Old_Turkic
Odia
Osage
Osmanya
Pahawh_Hmong
Palmyrene
Pau_Cin_Hau
Phags_Pa
Phénicien
Psalter_Pahlavi
Redjang
Runic
Samaritain
Saurashatra
Sharada
Shavien
Siddham
SignÉcriture
Sinhala
Sogdian
Sora_Sompeng
Soyombo
Sundanais
Syloti_Nagri
Syriaque
Tagalog
Tagbanoua
Tai_Le
Tai_Tham
Tai_Viet
Takri
Tamoul
Tangut
Telugu
Thaana
Thaï
Tibétain
Tifinagh
Tirhuta
Ugaritic
Vaï
Wancho
Warang_Citi
Yezidi
Yi
Zanabazar_Square
  classes de caractères Vim
\i caractère d’identificateur (NON PRIS EN CHARGE) VIM
\I \i sauf chiffres (NON PRIS EN CHARGE) VIM
\k caractère de mot clé (NON PRIS EN CHARGE) VIM
\K \k sauf chiffres (NON PRIS EN CHARGE) VIM
\f caractère de nom de fichier (NON PRIS EN CHARGE) VIM
\F \f sauf chiffres (NON PRIS EN CHARGE) VIM
\p caractère imprimable (NON PRIS EN CHARGE) VIM
\P \p sauf chiffres (NON PRIS EN CHARGE) VIM
\s caractère d’espacement (≡ [\t]) (NON PRIS EN CHARGE) VIM
\S caractère d’espacenon blanc (≡ [^ \t]) (NON PRIS EN CHARGE) VIM
\d chiffres (≡ [0-9]) VIM
\D pas de \d VIM
\x chiffres hexadécimaux (≡ [0-9A-FA-f]) (NON PRIS EN CHARGE) VIM
\X pas de \x (NON PRIS EN CHARGE) VIM
\o chiffre octal (≡ [0-7]) (NON PRIS EN CHARGE) VIM
\O pas de \o (NON PRIS EN CHARGE) VIM
\w caractère de mot VIM
\W pas de \w VIM
\h caractère de début de mot (NON PRIS EN CHARGE) VIM
\H pas de \h (NON PRIS EN CHARGE) VIM
\a alphabétique (NON PRIS EN CHARGE) VIM
\A pas de \a (NON PRIS EN CHARGE) VIM
\l minuscule (NON PRIS EN CHARGE) VIM
\L pas de minuscule (NON PRIS EN CHARGE) VIM
\u majuscule (NON PRIS EN CHARGE) VIM
\U pas de majuscule (NON PRIS EN CHARGE) VIM
_X \x plus nouvelle ligne, pour n’importe quel x (NON PRIS EN CHARGE) VIM
\c ignorer le cas (NON PRIS EN CHARGE) VIM
\C cas de correspondance (NON PRIS EN CHARGE) VIM
\m magic (NON PRIS EN CHARGE) VIM
\M nomagic (NON PRIS EN CHARGE) VIM
\v verymagic (NON PRIS EN CHARGE) VIM
\V verynomagic (NON PRIS EN CHARGE) VIM
\Z ignorer les différences entre les caractères de combinaison Unicode (NON PRIS EN CHARGE) VIM
  Magic
(?{code}) code perl arbitraire (NON PRIS EN CHARGE) PERL
(??{code}) code perl arbitraire différé (NON PRIS EN CHARGE) PERL
(?n) appel récurrent au groupe de capture regexp n (NON PRIS EN CHARGE)
(?+n) appel récurrent au groupe relatif +n (NON PRIS EN CHARGE)
(?-n) appel récurrent au groupe relatif -n (NON PRIS EN CHARGE)
(?C) Appel du PCRE (NON PRIS EN CHARGE) PCRE
(?R) appel récurrent à l’ensemble de regexp (≡ (?0)) (NON PRIS EN CHARGE)
( ?&nom) appel récurrent au groupe nommé (NON PRIS EN CHARGE)
(?P=name) rétro-référence nommé (NON PRIS EN CHARGE)
(?P>name) appel récurrent au groupe nommé (NON PRIS EN CHARGE)
(? (cond)true|false) branche conditionnelle (NON PRIS EN CHARGE)
(?(cond)true) branche conditionnelle (NON PRIS EN CHARGE)
(*ACCEPT) rendre les regexps plus similaires au Prologue (NON PRIS EN CHARGE)
(*COMMIT) (NON PRIS EN CHARGE)
(*F) (NON PRIS EN CHARGE)
(*FAIL) (NON PRIS EN CHARGE)
(*MARK) (NON PRIS EN CHARGE)
(*PRUNE) (NON PRIS EN CHARGE)
(*SKIP) (NON PRIS EN CHARGE)
(*THEN) (NON PRIS EN CHARGE)
(*ANY) définition de la convention de nouvelle ligne (NON PRIS EN CHARGE)
(*ANYCRLF) (NON PRIS EN CHARGE)
(*CR) (NON PRIS EN CHARGE)
(*CRLF) (NON PRIS EN CHARGE)
(*LF) (NON PRIS EN CHARGE)
(*BSR_ANYCRLF) définition de la convention (NON PRIS EN CHARGE) PCRE
(*BSR_UNICODE) (NON PRIS EN CHARGE) PCRE

Licence de contenu

Remarque

Certaines parties de cette page sont des modifications basées sur le travail créé et partagé par Chromium.org et utilisé conformément aux conditions décrites dans la Licence internationale Creative Commons Attribution 4.0. La page d’origine est disponible ici.

Licence Creative Commons
Ce travail est concédé sous une Licence internationale Creative Commons Attribution 4.0.

Voir également