2011-03-03 25 views
7
my $str='expire=0'; 

if ($str =~/expire\s*=\s* (?: 0[1-9]|[1-9][0-9])/){ 
    print " found it "; 
} 

no su trabajo¿Por qué el grupo que no captura (? :) parece no funcionar?

Condición expire= debe ser seguido por un número entre 1-99?

+0

¿Por qué incluso está utilizando un grupo sin captura en este patrón? – Sam

+0

Para agrupar la expresión "o" ... ¿por qué capturar si no es necesario extraerla? –

+0

¿Qué expresión "o"? – Sam

Respuesta

11

Su expresión regular tiene espacios, eliminarlos:

/expire\s*=\s* (?: 0[1-9]|[1-9][0-9])/ 
      ^^

también la expresión regular 0[1-9]|[1-9][0-9] no coincide con 0.

EDIT:

Sobre la base de sus comentarios, que desea permitir que un número de 1-99 después expire= esta manera puede utilizar:

/^expire\s*=\s*(?:[1-9]|[1-9][0-9])$/ 

o una versión más corta:

/^expire\s*=\s*(?:[1-9][0-9]?)$/ 

Como su ejemplo tiene 0 después de expire=, no t ser emparejado

También tenga en cuenta que he agregado los anclajes de inicio y fin. Sin ellos, la expresión regular puede coincidir con cualquier subcadena válida de la entrada. Ejemplo puede coincidir con expire=99 en la entrada expire=999

+0

todavía no está funcionando? – Tree

+0

Lo que está permitido después de 'expire =' – codaddict

+0

debe ser de 1 a 99 solo – Tree

2

Tiene un espacio entre el segundo \ s * y el comienzo del grupo no capturado. Tal vez puedas probar:

~/expire\s*=\s*(?:0[1-9]|[1-9][0-9])/ 
+0

todavía no se corresponde? – Tree

6

Si desea utilizar espacios en su expresión regular sin ellos espacios realidad a juego, es necesario utilizar el modificador x en su expresión regular. Es decir. / foo /x coincide con la cadena "foo", mientras que / foo / solo coincide con "foo".

+0

Buen consejo, pero diría que hace que la expresión regular sea más difícil de leer de un vistazo. –

+2

@Josh pruébalo en el mundo real, con un patrón complejo. Es bueno poder separar los bits relacionados, e incluso dividirlos en líneas :) – hobbs

+0

@hobbs ¡Lo hago! De cualquier manera funciona ... –

Cuestiones relacionadas