Spécifications RE2 pour les mappages d'URL

Pour configurer des mappages d'URL avec des règles de routage du trafic qui utilisent des expressions régulières, vous devez comprendre les exigences et les limites de la syntaxe des expressions régulières RE2.

RE2 présente les limites intégrées suivantes :

  • RE2 n'accepte pas les assertions lookahead ou lookbehind arbitraires, ni les références arrière. Plus précisément, les opérateurs de référence arrière suivants ne sont pas acceptés :
    • (?=) : assertion avant positive
    • (?!) : assertion avant négative
    • (?<=) : lookbehind positif
    • (?<!) : lookbehind négatif
    • \N : référence arrière où N est un entier
  • RE2 ne reconnaît pas \cx comme caractère Control-X.
  • RE2 ne reconnaît pas les opérateurs de regroupement atomique (?>...) et ++
  • RE2 ne reconnaît pas \C, \G ni \X.
  • RE2 ne reconnaît pas les sous-motifs conditionnels (?(...)...), les commentaires (?#...), les références de motifs (?R) (?1) (?P>foo) ni les callouts C (?C...).

En plus des limites RE2 décrites précédemment, nous appliquons d'autres restrictions à la syntaxe des expressions régulières en utilisant la liste d'autorisation suivante :

  • Les opérateurs à un seul caractère sont autorisés
  • Les groupes ne sont autorisés à n'avoir que des opérateurs de sous-correspondance.
  • Les groupes ne sont autorisés que sans répétitions
  • La répétition de caractères n'est autorisée que dans une seule expression régulière, avec les éléments suivants :
  • Les plages ne peuvent contenir que les éléments suivants :

Chaîne vide et analogues de chaînes vides

Opérateur Description
^ Au début du texte ou de la ligne (m=true)
$ À la fin du texte (comme \z et non \Z) ou de la ligne (m=true)
\A Au début du texte
\b À la limite d'un mot ASCII (\w d'un côté et \W, \A ou \z de l'autre)
\B Pas à la limite d'un mot ASCII
\g Au début du sous-texte recherché
\G À la fin du dernier match
\z À la fin du texte

Répétitions

Opérateur Description
x* Zéro ou plusieurs x, de préférence plusieurs
x+ Un ou plusieurs x, de préférence plusieurs
x? Zéro ou un x, de préférence un
x{n,m} N ou n+1 ou … ou m x, préférez plus
x{n,} N ou plus x, préférer plus
x{n} Exactement n x
x*? Zéro ou plusieurs x, de préférence moins
x+? Un ou plusieurs x, de préférence moins
x?? Zéro ou un x, zéro de préférence
x{n,m}? N ou n+1 ou … ou m x, de préférence moins
x{n,}? N ou plus x, préférer moins
x{n}? Exactement n x

Sous-correspondance

Opérateur Description
(re) Groupe de capture numéroté (sous-correspondance)
(?P<name>re) Groupe de capture nommé et numéroté (sous-correspondance)
(?<name>re) Groupe de capture nommé et numéroté (sous-correspondance)
(?:re) Groupe de non-capture
(?flags) Définir des indicateurs dans le groupe actuel (sans capture)
(?flags:re) Définir des indicateurs lors de la réécriture ; sans capture

des plages.

Opérateur Description
[] des plages.
\d Chiffres (≡ [0-9])
\D Pas de chiffre (≡ [^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 Pas de caractère de mot (≡ [^0-9A-Za-z_])
[[:alnum:]] Alphanumérique (≡ [0-9A-Za-z])
[[:alpha:]] Alphabétique (≡ [A-Za-z])
[[:ascii:]] ASCII (≡ [\x00-\x7F])
[[:blank:]] Vide (≡ [\t ])
[[:cntrl:]] Contrôle (≡ [\x00-\x1F\x7F])
[[:digit:]] Chiffres (≡ [0-9])
[[:lower:]] Minuscules (≡ [a-z])
[[:space:]] Espace blanc (≡ [\t\n\v\f\r ])
[[:upper:]] Majuscules (≡ [A-Z])
[[:word:]] Caractères de mot (≡ [0-9A-Za-z_])
[[:xdigit:]] Chiffre hexadécimal (≡ [0-9A-Fa-f])

Caractères autorisés dans les plages

Plage de caractères Description
0-9, A-Z, a-z Alphanumérique
\x00-\x7F ASCII
0-9A-Fa-f Chiffres hexadécimaux
\t\n\v\f\r Espace blanc
^ Négation de plage
!"#$%&'()*+,\-.:;<=>?@[\\\]^_`{|}~ Autres caractères