Spécifications RE2 pour les mappages d'URL

Cette page décrit les exigences et les limites associées à l'utilisation de la syntaxe RE2 pour les expressions régulières dans vos mappages d'URL.

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
    • (?<=) : recherche en arrière positive
    • (?<!) : 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+ Une ou plusieurs fois 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 fois
x*? Zéro ou plusieurs x, de préférence moins
x+? Une ou plusieurs correspondances, 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, en privilégiant le plus petit nombre
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 pendant re ; 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