Esta es una comparación de motores de expresión regular .
Bibliotecas
Nombre | Página web oficial | Lenguaje de programación | Licencia de software | Usado por |
---|---|---|---|---|
Impulsar .Regex [Nota 1] | Impulsar las bibliotecas de C ++ | C ++ | Aumentar | Bloc de notas ++> = 6.0.0, EmEditor |
Impulso expresivo | Impulsar las bibliotecas de C ++ | C ++ | Aumentar | |
DEELX | RegExLab | C ++ | Uso personal y comercial gratuito | |
FREJ [Nota 2] | Expresiones regulares difusas para Java | Java | LGPL | |
GLib / GRegex [Nota 3] | Manual de referencia de GLib | C | LGPL | |
GRETA | Investigación de Microsoft | C ++ | Microsoft | |
Gregex | Grovf Inc. | RTL, HLS | Propiedad | Motor de expresiones regulares FPGA acelerado> 100 Gbit / s para industrias de ciberseguridad, finanzas y comercio electrónico. |
RXP | Titán IC | RTL | Propiedad | Aceleración de búsqueda acelerada por hardware usando RegEx disponible para ASIC, FPGA y nube. Permite el procesamiento de contenido masivamente paralelo a velocidades ultra altas. |
Hyperscan | Intel | C, ensamblado específico de x86 ( SSSE3 + [1] ) | BSD de 3 cláusulas | Rspamd |
UCI | Componentes internacionales para Unicode | C, C ++ [Nota 4] | UCI | Foundation (versiones de código abierto de Apple y Swift) |
Yakarta / Regexp | El proyecto Apache Jakarta | Java | apache | |
java.util.regex | Manual de usuario de Java | Java | GNU GPLv2 con excepción Classpath | jEdit |
JRegex | JRegex | Java | BSD | |
MATLAB | Expresiones regulares | Lenguaje MATLAB | MATLAB, el lenguaje de la informática técnica | |
Oniguruma | Kosako | C | BSD | Atom , Take Command Console , Tera Term , TextMate , Sublime Text , SubEthaEdit , EmEditor y jq |
Pattwo | Stevesoft | Java (compatible con Java 1.0) | LGPL | |
PCRE | pcre.org | C, C ++ [Nota 5] | BSD | Servidor HTTP Apache , Nginx , BBEdit , Julia , HHVM , Notepad ++ <6.0.0, PHP , Delphi , R , Exim |
Qt / QRegExp | Digia | C ++ | Qt GNU GPL v. 3.0 , Qt GNU LGPL v. 2.1 , Qt Comercial | Kate , Kile |
regex: bibliotecas de expresiones regulares de Henry Spencer | ArgList | C | BSD | |
RE2 | RE2 | C ++ | BSD | Go , Hojas de cálculo de Google, Gmail, G Suite |
Expresiones regulares avanzadas de Henry Spencer | Tcl | C | BSD | |
RGX | RGX | Biblioteca de componentes basada en C ++ | P6R | |
SubReg | Matt Bucknall | C | MIT | |
TPerlRegEx | Componente TPerlRegEx VCL | Objeto Pascal | MPLv1.1 | |
TRE [Nota 2] | Ville Laurikari | C | BSD | musl |
TRegExpr | Estudio de expresión regular | Objeto Pascal | Licencia dual: freeware o LGPL con excepción de enlace estático | Comandante total |
XRegExp | XRegExp | JavaScript | MIT | |
Wolfram Language ( Mathematica ) | Centro de documentación de Wolfram Language | Wolfram Language | Mathematica , la plataforma de desarrollo Wolfram |
- ^ Anteriormente llamado Regex ++.
- ^ a b Uno de los motores de expresión regular difusa .
- ^ Incluido desde la versión 2.13.0.
- ^ ICU4J, la versión de Java, no admite expresiones regulares.
- ^ Los enlaces de C ++ fueron desarrollados por Google y se convirtieron oficialmente en parte de PCRE en 2006.
Idiomas
Idioma | Página web oficial | Licencia de software | Observaciones |
---|---|---|---|
ActionScript 3 | Centro de tecnología ActionScript | Libre | |
APL ( APLX , Dyalog, GNU) | Wiki APL | Licenciado por la implementación respectiva | ⎕SS (PCRE), ⎕R / ⎕S (PCRE), ⎕SS (PCRE2), respectivamente |
C ++ 11 ( C ++ ) | Sitio web de estándares C ++ | Licenciado por la implementación respectiva | Desde ISO14822: 2011 (e), similar a ECMAScript por defecto (Descripción gramatical) |
D | D | Aumente la licencia del software [Nota 1] | |
Ir | Golang.org | Estilo BSD | |
Haskell | Haskell.org | BSD3 | Omitido en el informe de idiomas y en las bibliotecas jerárquicas de GHC |
Java | Java | Licencia pública general GNU | Los RE se escriben como cadenas en el código fuente: todas las barras invertidas deben duplicarse, lo que perjudica la legibilidad. |
JavaScript ( ECMAScript ) | ECMA-262 | BSD3 | Limitados, pero los RE son ciudadanos de primera clase del idioma con una /.../mod sintaxis específica . |
Julia | JuliaLang.org | Licencia MIT | Los RE son parte de la biblioteca principal del lenguaje que usa PCRE incorporado y está disponible un contenedor opcional para (código C) ICU. |
Lua | Lua.org | Licencia MIT | Utiliza un dialecto simplificado y limitado; se puede vincular a una biblioteca más potente, como PCRE o un analizador alternativo como LPeg. |
Mathematica | Wolfram | Propiedad | |
.NETO | MSDN | Licencia MIT [Nota 2] [Nota 3] | |
Nim | nim-lang.org | Licencia MIT | Biblioteca estándar incluye basado en PCRE re y NRE módulos, así como diversas alternativas (ex. Strutils , clavijas ( Parsing Expresión Gramática de juego), strscans , parseutils , etc.). |
Pascal libre ( Object Pascal ) | www.freepascal.org | LGPL con excepción de enlace estático | Free Pascal 2.6+ se envía con TRegExpr de Sorokin y otras dos bibliotecas de expresiones regulares; Consulte wiki.lazarus.freepascal.org/Regexpr . |
OCaml | Caml | LGPL | A partir de 2010[actualizar], el módulo estándar generalmente se considera obsoleto; [2] Las bibliotecas recomendadas a menudo son pcre (con soporte completo para PCRE) y re (que no es tan completo pero afirma un mejor rendimiento y proporciona interfaces para sintaxis populares: PCRE, Perl, Posix, Emacs, shell globbing). |
Perl | Perl.com | Licencia artística o licencia pública general GNU | Parte central y completa del idioma |
PHP | PHP.net | Licencia PHP | Tiene dos implementaciones, siendo PCRE la más eficiente en velocidad, funciones |
POSIX C ( C ) | Publicación web POSIX.1 | Licenciado por la implementación respectiva | Admite la sintaxis POSIX BRE y ERE |
Pitón | python.org | Licencia de Python Software Foundation | Python tiene dos implementaciones principales, construidas en la nueva y la expresión regular de la biblioteca. |
Rubí | ruby-doc.org | Licencia pública general de la biblioteca GNU | Ruby 1.8, Ruby 1.9 y Ruby 2.0 y versiones posteriores utilizan diferentes motores; Ruby 1.9 integra Oniguruma, Ruby 2.0 y luego integra Onigmo, una bifurcación de Oniguruma. |
Oxido | docs.rs | Licencia MIT | La caja de expresiones regulares principal no permite expresiones de búsqueda. Hay una unión de Oniguruma llamada onig que lo hace. |
SAP ABAP | SAP.com | Propiedad | |
Tcl | tcl.tk | Licencia Tcl / Tk (estilo BSD) | La biblioteca Tcl también funciona como una biblioteca de expresiones regulares. |
Wolfram Language | Investigación Wolfram | Propietario : utilizable de forma gratuita a una escala limitada en la plataforma de desarrollo Wolfram | |
Esquema XML | W3C | Licenciado por la implementación respectiva | |
XPath 3 / XQuery | W3C | Licenciado por la implementación respectiva |
- ^ http://www.digitalmars.com/d/2.0/phobos/std_regex.html
- ^ https://github.com/dotnet/corefx/blob/7116584186f8f3a886616aaf8cb5d4a982c60e27/src/System.Text.RegularExpressions/src/System/Text/RegularExpressions/Regex.cs#L2
- ^ https://github.com/dotnet/corefx#license
Características del idioma
NOTA: Una aplicación que utiliza una biblioteca para el soporte de expresiones regulares no ofrece necesariamente el conjunto completo de características de la biblioteca, por ejemplo, GNU grep que usa PCRE no ofrece soporte de búsqueda anticipada, aunque PCRE sí.
Parte 1
cuantificador "+" | Clases de caracteres negadas | Cuantificadores no codiciosos [Nota 1] | Grupos tímidos [Nota 2] | Recursividad | Mirar hacia el futuro | Mira atrás | Referencias anteriores [Nota 3] | > 9 capturas indexables | |
---|---|---|---|---|---|---|---|---|---|
Boost.Regex | sí | sí | sí | sí | Sí [Nota 4] | sí | sí | sí | sí |
Impulso expresivo | sí | sí | sí | sí | Sí [Nota 5] | sí | sí | sí | sí |
CL-PPCRE | sí | sí | sí | sí | No | sí | sí | sí | sí |
EmEditor | sí | sí | sí | sí | No | sí | sí | sí | No |
FREJ | No [Nota 6] | No | Algunos [Nota 6] | sí | No | No | No | sí | sí |
GLib / GRegex | sí | sí | sí | sí | sí | sí | sí | sí | sí |
GNU grep | sí | sí | sí | sí | No | sí | sí | sí | ? |
Haskell | sí | sí | sí | sí | No | sí | sí | sí | sí |
RXP | sí | sí | sí | sí | No | No | No | sí | sí |
UCI Regex | sí | sí | sí | sí | No | sí | sí | sí | sí |
Java | sí | sí | sí | sí | No | sí | sí | sí | sí |
JavaScript ( ECMAScript ) | sí | sí | sí | sí | No | sí | Sí [Nota 7] | sí | sí |
JGsoft | sí | sí | sí | sí | No | sí | sí | sí | sí |
Lua | sí | sí | Algunos [Nota 8] | No | No | No | No | sí | No |
.NETO | sí | sí | sí | sí | No | sí | sí | sí | sí |
OCaml | sí | sí | No | No | No | No | No | sí | No |
PCRE | sí | sí | sí | sí | sí | sí | sí | sí | sí |
Perl | sí | sí | sí | sí | sí | sí | sí | sí | sí |
PHP | sí | sí | sí | sí | sí | sí | sí | sí | sí |
Pitón | sí | sí | sí | sí | Sí [Nota 9] | sí | sí | sí | sí |
Qt / QRegExp | sí | sí | sí | sí | No | sí | No | sí | sí |
RE2 | sí | sí | sí | sí | No | No | No | No | sí |
Rubí / Onigmo | sí | sí | sí | sí | sí | sí | sí | sí | sí |
TRE | sí | sí | sí | sí | No | No | No | sí | No |
Empuje | sí | sí | sí | sí | No | sí | sí | sí | No |
RGX | sí | sí | sí | sí | No | sí | sí | sí | sí |
Tcl | sí | sí | sí | sí | No | sí | sí | sí | sí |
TRegExpr | sí | ? | sí | ? | ? | ? | ? | ? | ? |
Esquema XML | sí | sí | No | N / A | No | No | No | No | N / A |
XPath 3 / XQuery | sí | sí | sí | sí | No | No | No | sí | sí |
XRegExp | sí | sí | sí | sí | No | sí | No | sí | sí |
- ^ Los cuantificadores no codiciosos coinciden con la menor cantidad de caracteres posible, en lugar de la cantidad predeterminada de tantos. Tenga en cuenta que muchosmotoresanteriores a POSIX no eran codiciosos y no tenían cuantificadores codiciosos en absoluto.
- ^ No se puede hacer referencia a los grupos tímidos , también llamadosgrupos que no capturan , con referencias a la inversa; Los grupos que no capturan se utilizan para acelerar la coincidencia cuando no es necesario acceder al contenido del grupo más adelante.
- ^ Las referencias inversas permiten hacer referencia a grupos previamente emparejados en partes posteriores de la expresión regular y / o cadena de reemplazo (cuando corresponda). Por ejemplo, ([ab] +) \ 1 coincide con "abab" pero no con "abaab".
- ^ http://www.boost.org/doc/libs/1_47_0/libs/regex/doc/html/boost_regex/syntax/perl_syntax.html#boost_regex.syntax.perl_syntax.recursive_expressions
- ^ http://www.boost.org/doc/libs/1_47_0/doc/html/xpressive/user_s_guide.html#boost_xpressive.user_s_guide.grammars_and_nested_matches.embedding_a_regex_by_reference
- ^ a b FREJ no tiene cuantificadores repetitivos, pero tiene un elemento "opcional" que se comporta de manera similar a "?" simple cuantificador.
- ^ A partir de ES2018
- ^ El único cuantificador no codicioso de Lua es
-
, que es una versión no codiciosa de*
. No tiene versiones no codiciosas de+
o?
; en el primer caso, el efecto no codicioso se puede lograr repitiendo el token seguido de-
, pero en el último caso, no hay equivalente. - ^ Compatible solo con labiblioteca de expresiones regulares opcional.
Parte 2
Directivas [Nota 1] | Condicionales | Grupos atómicos [Nota 2] | Captura con nombre [Nota 3] | Comentarios | Código incrustado | Soporte de propiedad Unicode [3] | Grupos de equilibrio [Nota 4] | Miradas hacia atrás de longitud variable [Nota 5] | |
---|---|---|---|---|---|---|---|---|---|
Boost.Regex | sí | sí | sí | sí | sí | No | Algunos [Nota 6] | No | No |
Impulso expresivo | sí | No | sí | sí | sí | No | No | No | No |
CL-PPCRE | sí | sí | sí | sí | sí | sí | Algunos [Nota 6] | No | No |
EmEditor | sí | sí | ? | ? | sí | No | ? | No | No |
FREJ | No | No | sí | sí | sí | No | ? | No | No |
GLib / GRegex | sí | sí | sí | sí | sí | No | Algunos [Nota 6] | No | No |
GNU grep | sí | sí | ? | sí | sí | No | No | No | No |
Haskell | ? | ? | ? | ? | ? | No | No | No | No |
RXP | sí | sí | No | sí | sí | No | No | No | No |
UCI Regex | sí | No | sí | Sí [Nota 7] | sí | No | sí | No | No |
Java | sí | No | sí | Sí [Nota 8] | sí | No | Algunos [Nota 6] | No | No |
JavaScript ( ECMAScript ) | No | No | No | No | No | No | Algunos [Nota 6] [Nota 9] [4] | No | No |
JGsoft | sí | sí | sí | sí | sí | No | Algunos [Nota 6] | No | sí |
Lua | No | No | No | No | No | No | No | No | No |
.NETO | sí | sí | sí | sí | sí | No | Algunos [Nota 6] | sí | sí |
OCaml | No | No | No | No | No | No | No | No | No |
PCRE | sí | sí | sí | sí | sí | sí | sí | No | No |
Perl | sí | sí | sí | sí | sí | sí | sí | No | No [Nota 10] |
PHP | sí | sí | sí | sí | sí | No | No | No | No |
Pitón | sí | sí | Sí [Nota 11] | sí | sí | No | Sí [Nota 12] | No | Sí [Nota 11] |
Qt / QRegExp | No | No | No | No | No | No | No | No | No |
RE2 | sí | No | ? | sí | No | No | Algunos [Nota 6] | No | No |
Rubí / Onigmo | sí | sí | sí | sí | sí | sí | Algunos [Nota 6] | No | No |
Tcl | sí | No | sí | No | sí | No | sí | No | No |
TRE | sí | No | No | No | sí | No | ? | No | No |
Empuje | sí | No | sí | No | No | No | No | No | sí |
RGX | sí | sí | sí | sí | sí | No | sí | No | No |
Esquema XML | No | No | No | No | No | No | sí | No | No |
XPath 3 / XQuery | No | No | No | No | No | No | sí | No | No |
XRegExp | Solo líder | No | No | sí | sí | No | sí | No | No |
- ^ También conocidos como modificadores de banderas , modificadores de modos o letras de opciones . Patrón de ejemplo: "(? I: test)".
- ^ También se denominan subexpresiones independientes .
- ^ Similar a las referencias posteriores, pero con nombres en lugar de índices.
- ^ Característica especial que permite hacer coincidir construcciones equilibradas sin recursividad.
- ^ Se refiere a la posibilidad de incluir cuantificadores en búsquedas retrospectivas, lo que hace que su longitud sea impredecible.
- ^ a b c d e f g h i El soporte de la propiedad Unicode puede estar incompleto (¡los productos se actualizan continuamente!). Todo estará incompleto cuando se publique una nueva revisión Unicode hasta que se actualicen para cumplir.
- ^ Disponible a partir de ICU55.
- ^ Disponible a partir de JDK7.
- ^ El soporte y la variedad de propiedades dependen de la implementación.
- ^ Soporte experimental agregado en v5.29.9.
- ^ a b Compatible únicamente con la biblioteca de expresiones regulares opcional .
- ^ Solo puede estar disponible en la biblioteca de expresiones regulares cuando se usa con versiones de Python posteriores a la 3.3.
Características de la API
Compatibilidad nativa con UTF-16 [Nota 1] | Compatibilidad con UTF-8 nativo [Nota 1] | Coincidencia de varias líneas | Coincidencia parcial [Nota 2] | |
---|---|---|---|---|
Boost.Regex | No | No | sí | sí |
GLib / GRegex | sí | sí | sí | sí |
RXP | sí | sí | No | sí |
UCI Regex | sí | No | sí | ? |
Java | No | Parcial [Nota 3] | sí | sí |
.NETO | No [Nota 4] | sí | sí | ? |
PCRE | Sí [Nota 5] | sí | sí | sí |
Qt / QRegExp | sí | No | No | ? |
Tcl | sí | Sí [Nota 6] | sí | ? |
TRE | sí | sí | sí | ? |
RGX | No | No | sí | ? |
wxWdigets :: wxRegEx [Nota 7] | sí | sí | sí | ? |
XRegExp | sí | ? | sí | ? |
- ^ a b Significa que el formato se puede utilizar internamente sin conversión explícita.
- ^ Coincidencia parcial de toda la expresión regular. Por ejemplo, el patrón ". * END $" coincidirá parcialmente con cualquier cadena, pero solo las cadenas que terminen en END completamente. [1] .
- ^ Admite el estándar Unicode 4.0 desde 2003; Los últimos planes para JDK7 incluyen soporte para Unicode 6.0 (2011). [2] .
- ^ La implementación utilizafunciones / soporte UCS-2 originales, por lo que solo reconoce 64K caracteres en total (en comparación con los 1,112,064 caracteres de UTF-16 ). Un representante de desarrolladores de Microsoft respondió a un informe de error sobre esto como "no se solucionará" en 2010. [3] .
- ^ Desde la versión 8.30.
- ^ Tcl incluye facilidades para convertir ay desde UTF-8.
- ^ wxRegEx usa cualquierbiblioteca POSIX proporcionada por el sistemao, si no está disponible, y para el modo Unicode usala biblioteca de Henry Spencer .
Ver también
- Expresión regular § Implementaciones y tiempos de ejecución
Referencias
- ^ https://intel.github.io/hyperscan/dev-reference/getting_started.html#requirements
- ^ [4]
- ^ https://www.unicode.org/reports/tr18/
- ^ "ECMA-262, novena edición, junio de 2018 Especificación de idioma ECMAScript® 2018" . www.ecma-international.org . Consultado el 4 de agosto de 2020 .
enlaces externos
- Comparación de sabores de expresión regular : comparación detallada de los sabores de expresión regular más populares
- Resumen de sintaxis de Regexp
- Prueba de expresión regular en línea : con soporte para Java, JavaScript, .Net, PHP, Python y Ruby
- Implementación de expresiones regulares : serie de artículos de Russ Cox, autor de RE2
- Motores de expresión regular