Articulo de referencia

RE2 (software)

{{cite web |last=Cox |first=Russ |date=2010-03-11 |df=mdy |title=RE2: a principled approach to regular expression matching |url=https://opensource.googleblog.com/2010/03/re2-pri...

RE2 es una biblioteca de software C++ [ 3 ] que implementa un motor de expresiones regulares [ 3 ] . Utiliza máquinas de estados finitos , a diferencia de la mayoría de las demás bibliotecas de expresiones regulares . RE2 requiere una versión mínima de C++17 y utiliza la biblioteca Abseil de Google.

RE2 fue implementado por Google y Google utiliza RE2 para sus productos. [ 4 ] RE2 utiliza un algoritmo de autómata finito determinista "sobre la marcha" basado en el grep Plan 9 de Ken Thompson . [ 5 ] Está diseñado para evitar ataques ReDoS (denegación de servicio mediante expresiones regulares).

Comparación con PCRE

RE2 tiene un rendimiento comparable al de las expresiones regulares compatibles con Perl (PCRE). Para ciertos operadores de expresiones regulares, como |el operador de alternancia o disyunción lógica , es superior a PCRE. A diferencia de PCRE, que admite características como búsquedas alternativas, retroreferencias y recursión , RE2 solo puede reconocer lenguajes regulares debido a su construcción mediante el algoritmo DFA de Thompson [ 5 ] . También es ligeramente más lento que PCRE para las operaciones de captura de paréntesis.

PCRE puede usar una pila recursiva grande , lo que conlleva un alto consumo de memoria y un tiempo de ejecución exponencial en ciertos patrones. En cambio, RE2 usa una pila de tamaño fijo y garantiza que su tiempo de ejecución aumente linealmente (no exponencialmente) con el tamaño de la entrada. La memoria máxima asignada con RE2 es configurable. Esto la hace más adecuada para su uso en aplicaciones de servidor, que requieren límites en el uso de memoria y el tiempo de cálculo.

Adopción

RE2 está disponible para los usuarios de Google Docs y Google Sheets . [ 6 ] Google Sheets admite RE2 excepto la coincidencia de clases de caracteres Unicode. [ 7 ] RegexExtract no utiliza agrupamiento .

Ejemplo

Aquí se muestra un ejemplo de cómo usarlo re2contra un posible ataque ReDoS (denegación de servicio mediante expresiones regulares).

importar < re2 / re2 . h > ;importar std ;using std :: string ; using re2 :: RE2 ;int main ( int argc , char * argv []) { string text = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa!" string pattern = "(a+)+$" ; bool match = RE2 :: FullMatch ( text , pattern ); std :: println ( "Resultado de la coincidencia: {}" , match ); }

RE2 viene con un envoltorio Python incorporado , disponible en el Índice de Paquetes de Python (PyPI) como google-re2. [ 8 ]

El paquete integrado regexpen Go utiliza los mismos patrones e implementación que RE2, aunque está escrito en Go. [ 9 ] Esto no es sorprendente, dado que Go cuenta con personal común del equipo de Plan 9 .

El algoritmo RE2 se ha reescrito en Rust como el paquete regex. El firewall de aplicaciones web de CloudFlare utiliza este paquete porque el algoritmo RE2 es inmune a ReDoS . [ 10 ]

Russ Cox también escribió RE1, una expresión regular anterior basada en un intérprete de código de bytes. [ 11 ] OpenResty utiliza una bifurcación de RE1 llamada "sregex". [ 12 ]

Existe un enlace oficial de Java , llamado RE2J ( com.google.re2j). [ 8 ]

Los siguientes idiomas tienen enlaces no oficiales: [ 8 ]

Véase también

Referencias

  1. Cox, Russ (11 de marzo de 2010). "RE2: un enfoque basado en principios para la coincidencia de expresiones regulares" . Blog de código abierto de Google . Consultado el 29 de mayo de 2020 .
  2. "Versiones" . Github . Consultado el 15 de septiembre de 2025 .
  3. 1 2 Dediu, Adrian-Horia; Martín-Vide, Carlos; Truthe, Bianca (15 de marzo de 2013). Teoría y aplicaciones del lenguaje y los autómatas: 7.ª Conferencia Internacional, LATA 2013, Bilbao, España, 2-5 de abril de 2013, Actas . Springer. pp. 322–324 . ISBN  978-3-642-37064-9.
  4. "Buscar y usar la función de buscar y reemplazar: Buscar y reemplazar elementos usando expresiones regulares" . support.google.com . Consultado el 30 de noviembre de 2024 .
  5. 1 2 Cox, Russ. "Coincidencia de expresiones regulares en la práctica" . swtch.com .
  6. "Buscar y usar la función de buscar y reemplazar" . Consultado el 24 de marzo de 2020 .
  7. "RegMatch" .
  8. 1 2 3 "Github - google/re2" . github.com . 1 de julio de 2025.
  9. "paquete regexp - regexp - Go Packages" . Consultado el 8 de noviembre de 2024 .
  10. "Acelerando el WAF un 40%" . El blog de Cloudflare . 1 de julio de 2020.
  11. "Coincidencia de expresiones regulares: el enfoque de la máquina virtual" . swtch.com .
  12. "openresty/sregex: Un motor de expresiones regulares compatible con Perl, basado en NFA/DFA sin retroceso, que realiza coincidencias en grandes flujos de datos" . OpenResty. 6 de febrero de 2024.