Especificaciones de RE2 para mapas de URL

En esta página, se describen los requisitos y las limitaciones asociados con el uso de la sintaxis RE2 para las expresiones regulares en tus mapas de URLs.

RE2 tiene las siguientes limitaciones integradas:

  • RE2 no admite aserciones de anticipación o retroceso arbitrarias, ni tampoco referencias inversas. Específicamente, no se admiten los siguientes operadores de referencia inversa:
    • (?=): Elemento anticipado positivo
    • (?!): Elemento anticipado negativo
    • (?<=): Es una búsqueda hacia atrás positiva.
    • (?<!): Lookbehind negativo
    • \N: Es una referencia inversa en la que N es un número entero.
  • RE2 no reconoce \cx como el carácter Control-X.
  • RE2 no reconoce los operadores de agrupamiento atómico (?>...) y ++.
  • RE2 no reconoce \C, \G ni \X.
  • RE2 no reconoce subpatrones condicionales (?(...)...), comentarios (?#...), referencias de patrones (?R) (?1) (?P>foo) ni llamadas externas de C (?C...).

Además de las limitaciones de RE2 descritas anteriormente, aplicamos más restricciones a la sintaxis de expresiones regulares con la siguiente lista de entidades permitidas:

Cadena vacía y análogos de cadenas vacías

Operador Descripción
^ Al principio del texto o la línea (m=true)
$ Al final del texto (como \z, no \Z) o de la línea (m=true)
\A Al principio del texto
\b En el límite de una palabra ASCII (con \w a un lado y \W, \A o \z al otro)
\B No se encuentra en un límite de palabras ASCII
\g Al comienzo del subtexto que se busca
\G Al final del último partido
\z Al final del texto

Repeticiones

Operador Descripción
x* Cero o más X, preferiblemente más
x+ Uno o más X, preferiblemente más
x? Cero o una X, se prefiere una
x{n,m} N o n+1 o… o m x, preferir más
x{n,} N o más X, preferir más
x{n} Exactamente n veces
x*? Cero o más X, preferiblemente menos
x+? Uno o más X, preferiblemente menos
x?? Cero o una X, se prefiere cero
x{n,m}? N o N+1 o… o M x, preferir menos
x{n,}? N o más X, preferiblemente menos
x{n}? Exactamente n veces

Subcoincidencia

Operador Descripción
(re) Grupo de captura numerado (subcoincidencia)
(?P<name>re) Grupo de captura con nombre y número (subcoincidencia)
(?<name>re) Grupo de captura con nombre y número (subcoincidencia)
(?:re) Grupo sin captura
(?flags) Establece marcas dentro del grupo actual; no captura
(?flags:re) Establece marcas durante la RE; no captura

Rangos

Operador Descripción
[] Rangos
\d Dígitos (≡ [0-9])
\D No son dígitos (≡ [^0-9])
\s Espacio en blanco (≡ [\t\n\f\r ])
\S No es espacio en blanco (≡ [^\t\n\f\r ])
\w Caracteres de palabra (≡ [0-9A-Za-z_])
\W No son caracteres de palabra (≡ [^0-9A-Za-z_]).
[[:alnum:]] Alfanumérico (≡ [0-9A-Za-z])
[[:alpha:]] Alfabético (≡ [A-Za-z])
[[:ascii:]] ASCII (≡ [\x00-\x7F])
[[:blank:]] En blanco (≡ [\t ])
[[:cntrl:]] Control (≡ [\x00-\x1F\x7F])
[[:digit:]] Dígitos (≡ [0-9])
[[:lower:]] Minúsculas (≡ [a-z])
[[:space:]] Espacio en blanco (≡ [\t\n\v\f\r ])
[[:upper:]] Mayúsculas (≡ [A-Z])
[[:word:]] Caracteres de palabra (≡ [0-9A-Za-z_])
[[:xdigit:]] Dígito hexadecimal (≡ [0-9A-Fa-f])

Caracteres permitidos en los rangos

Intervalo de caracteres Descripción
0-9, A-Z, a-z Alfanumérico
\x00-\x7F ASCII
0-9A-Fa-f Dígitos hexadecimales
\t\n\v\f\r Espacio en blanco
^ Negación de rango
!"#$%&'()*+,\-.:;<=>?@[\\\]^_`{|}~ Otros caracteres