Parece que los lenguajes más comunes en realidad usan su propia implementación de expresiones regulares "similares a Perl" que las que realmente usan libpcre. Los idiomas que entran en esta clase incluyen (al menos) Java, JavaScript y Python.
java.util.regex
la biblioteca de Java utiliza una sintaxis que está muy fuertemente basada en Perl (aprox. Versión 5.8) expresiones regulares, incluyendo las reglas para escapar, los \p
y \P
clases Unicode, no codiciosos y cuantificadores "posesivos", referencias hacia atrás, \Q
. .\E
citando, y varias de las construcciones (?...)
incluyendo grupos que no capturan, búsqueda anticipada de ancho cero/detrás, y grupos que no retroceden. De hecho, las expresiones regulares de Java parecen tener más en común con las expresiones regulares de Perl que las de libpcre. :)
El lenguaje JavaScript también usa expresiones regulares que se derivan de Perl; Están ausentes las clases Unicode, look-behind, los cuantificadores posesivos y los grupos sin retroceso, pero el resto de lo que mencioné para Java también está presente en JS.
La sintaxis de expresiones regulares de Python también se basa en Perl 5, con cuantificadores no codiciosos, la mayoría de los constructos (?...)
incluyendo grupos no capturadores, patrones anticipados/posteriores y condicionales, así como grupos de captura con nombre (pero con un sintaxis diferente de Perl o PCRE). Los grupos sin retroceso y los cuantificadores "posesivos" están ausentes (hasta donde puedo ver), como lo son las clases de caracteres Unicode \p
y \P
, aunque las clases estándar \d
, \s
y \w
son aptas para Unicode si así lo solicita.
Gracias. He aclarado mi pregunta para mostrar que estoy interesado en las características que Java 1.6 no admite –
Perl, Python, .NET, libpcre. Esas son las únicas implementaciones que conozco de ese soporte llamado grupos de captura. – hobbs
En realidad, muchas de las extensiones de Python funcionarán en Perl moderno. –