Especificações do RE2 para mapas de URL

Esta página descreve os requisitos e as limitações associados ao uso da sintaxe RE2 para expressões regulares nos mapas de URL.

O RE2 tem as seguintes limitações integradas:

  • O RE2 não é compatível com asserções arbitrárias de lookahead ou lookbehind nem com backreferences. Especificamente, os seguintes operadores de backreference não são compatíveis:
    • (?=): antecipação positiva
    • (?!): antecipação negativa
    • (?<=): lookbehind positivo
    • (?<!): lookbehind negativo
    • \N: backreference em que N é um número inteiro
  • O RE2 não reconhece \cx como o caractere Control-X.
  • O RE2 não reconhece os operadores de agrupamento atômico (?>...) e ++.
  • O RE2 não reconhece \C, \G ou \X.
  • O RE2 não reconhece subpadrões condicionais (?(...)...), comentários (?#...), referências de padrões (?R) (?1) (?P>foo) ou callouts em C (?C...).

Além das limitações do RE2 descritas anteriormente, aplicamos outras restrições à sintaxe de expressão regular usando a seguinte lista de permissões:

String vazia e análogos de strings vazias

Operador Descrição
^ No início do texto ou da linha (m=true)
$ No final do texto (como \z e não \Z) ou da linha (m=true)
\A No início do texto
\b No limite de palavra ASCII (\w de um lado e \W, \A ou \z do outro)
\B Não está no limite de uma palavra ASCII
\g No início do subtexto pesquisado
\G No final da última partida
\z No fim do texto

Repetições

Operador Descrição
x* Zero ou mais x, prefira mais
x+ Uma ou mais x, de preferência mais
x? Zero ou um x, preferir um
x{n,m} N ou n+1 ou ... ou m x, prefira mais
x{n,} N ou mais x, prefira mais
x{n} Exatamente n x
x*? Zero ou mais x, preferir menos
x+? Um ou mais x, preferir menos
x?? Zero ou um x, prefira zero
x{n,m}? N ou n+1 ou ... ou m x, prefira menos
x{n,}? N ou mais x, prefira menos
x{n}? Exatamente n x

Subcorrespondência

Operador Descrição
(re) Grupo de captura numerado (subcorrespondência)
(?P<name>re) Grupo de captura nomeado e numerado (subcorrespondência)
(?<name>re) Grupo de captura nomeado e numerado (subcorrespondência)
(?:re) Grupo de não captura
(?flags) Definir flags no grupo atual; sem captura
(?flags:re) Definir flags durante re; não captura

Intervalos

Operador Descrição
[] Intervalos
\d Dígitos (≡ [0-9])
\D Não são dígitos (≡ [^0-9])
\s Espaço em branco (≡ [\t\n\f\r ])
\S Não é espaço em branco (≡ [^\t\n\f\r ])
\w Caracteres de palavras (≡ [0-9A-Za-z_])
\W Não são caracteres de palavras (≡ [^0-9A-Za-z_])
[[:alnum:]] Alfanumérico (≡ [0-9A-Za-z])
[[:alpha:]] Alfabético (≡ [A-Za-z])
[[:ascii:]] ASCII (≡ [\x00-\x7F])
[[:blank:]] Em branco (≡ [\t ])
[[:cntrl:]] Controle (≡ [\x00-\x1F\x7F])
[[:digit:]] Dígitos (≡ [0-9])
[[:lower:]] Minúscula (≡ [a-z])
[[:space:]] Espaço em branco (≡ [\t\n\v\f\r ])
[[:upper:]] Maiúscula (≡ [A-Z])
[[:word:]] Caracteres de palavras (≡ [0-9A-Za-z_])
[[:xdigit:]] Dígito hexadecimal (≡ [0-9A-Fa-f])

Caracteres permitidos em intervalos

Intervalo de caracteres Descrição
0-9, A-Z, a-z Alfanumérico
\x00-\x7F ASCII
0-9A-Fa-f Dígitos hexadecimais
\t\n\v\f\r Espaço em branco
^ Negação de intervalo
!"#$%&'()*+,\-.:;<=>?@[\\\]^_`{|}~ Outros caracteres