[caracas-pm] Expresión regular between

Francisco Obispo fobispo at isc.org
Thu Jul 12 13:45:11 PDT 2012


Exacto,

ahora, si lo que quieres es descartar lo que esta entre (), entonces no uses () en la expresión regular, pues estas consumiendo mas recursos de lo que necesitas.

así que algo como:

$cadena =~ s{\([^\)]*\)}{}g;

sería suficiente y mas eficiente, pues no crearías una referencia a $1..$n.

saludos

On Jul 12, 2012, at 1:28 PM, Luis Muñoz wrote:

> 
> On Jul 12, 2012, at 4:04 PM, Lenin Hernández wrote:
> 
>> $cadena =~ m/(\(.*\))/;
>> que me retorna igualmente  (xyz123)
>> 
>> el *? si me consumía prácticamente el 100% del procesador hice la
>> prueba con time
>> 
>> usando *? = real	0m6.583s
>> y usando solo * =  real	0m6.130s
>> (60mil lineas usando equipo modesto)
> 
> Si quieres ser más rápido, haz esto
> 
> $cadena =~ m{(\([^\)]*\))};
> 
> En un regexp, '.' hace match con cualquier caracter. Esto significa que el motor de expresiones regulares va a consumir toda la entrada hasta el final y luego, comenzará a "echar para atrás" (backtracking) hasta que encuentre el ')'. Usando la construcción que mostré más arriba, el motor de expresiones regulares va a consumir la entrada mientras no encuentre el ')'. Si tienes mucho texto después de lo que estás buscando, esta opción va a ser la mejor.
> 
> Saludos
> 
> -lem

Francisco Obispo 
email: fobispo at isc.org
Phone: +1 650 423 1374 || INOC-DBA *3557* NOC
PGP KeyID = B38DB1BE



More information about the caracas-pm mailing list