Especificações RE2 para mapas de URLs

Esta página descreve os requisitos e as limitações associados à utilização da sintaxe RE2 para expressões regulares nos seus mapas de URLs.

O RE2 tem as seguintes limitações incorporadas:

  • O RE2 não suporta asserções lookahead ou lookbehind arbitrárias, nem referências anteriores. Especificamente, os seguintes operadores de referência anterior não são suportados:
    • (?=) - positive lookahead
    • (?!) - negative lookahead
    • (?<=) - positive lookbehind
    • (?<!) – negative lookbehind
    • \N- Referência anterior em que N é um número inteiro
  • O RE2 não reconhece \cx como o caráter Control-X.
  • O RE2 não reconhece os operadores de agrupamento atómico (?>...) e ++
  • O RE2 não reconhece \C, \G nem \X.
  • O RE2 não reconhece subpadrões condicionais (?(...)...), comentários (?#...), referências de padrões (?R) (?1) (?P>foo) nem chamadas C (?C...).

Além das limitações do RE2 descritas anteriormente, aplicamos mais restrições à sintaxe de expressões regulares através da seguinte lista de autorizações:

  • São permitidos operadores de um único caráter
  • Os grupos só podem ter operadores de submatch
  • Só são permitidos grupos sem repetições
  • A repetição de carateres só é permitida numa única expressão regular juntamente com o seguinte:
  • Os intervalos só podem ter o seguinte:

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 palavras ASCII (\w de um lado e \W, \A ou \z do outro)
\B Não está no limite da palavra ASCII
\g No início do subtexto que está a ser pesquisado
\G No final da última partida
\z No fim do texto

Repetições

Operador Descrição
x* Zero ou mais x, preferencialmente mais
x+ Um ou mais x, preferencialmente mais
x? Zero ou um x, preferir um
x{n,m} N ou n+1 ou … ou m x, preferir mais
x{n,} N ou mais x, prefiro mais
x{n} Exatamente n x
x*? Zero ou mais x, preferir menos
x+? Um ou mais x, prefira menos
x?? Zero ou um x, preferir zero
x{n,m}? N ou n+1 ou … ou m x, prefira menos
x{n,}? N ou mais x, prefiro menos
x{n}? Exatamente n x

Submatch

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

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 Carateres de palavras (≡ [0-9A-Za-z_])
\W Não são carateres 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:]] Controlo (≡ [\x00-\x1F\x7F])
[[:digit:]] Dígitos (≡ [0-9])
[[:lower:]] Minúsculas (≡ [a-z])
[[:space:]] Espaço em branco (≡ [\t\n\v\f\r ])
[[:upper:]] Maiúsculas (≡ [A-Z])
[[:word:]] Carateres de palavras (≡ [0-9A-Za-z_])
[[:xdigit:]] Dígito hexadecimal (≡ [0-9A-Fa-f])

Carateres permitidos em intervalos

Intervalo de carateres 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 carateres