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
?
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
?
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
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])/
todavía no se corresponde? – Tree
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".
Buen consejo, pero diría que hace que la expresión regular sea más difícil de leer de un vistazo. –
@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
@hobbs ¡Lo hago! De cualquier manera funciona ... –
¿Por qué incluso está utilizando un grupo sin captura en este patrón? – Sam
Para agrupar la expresión "o" ... ¿por qué capturar si no es necesario extraerla? –
¿Qué expresión "o"? – Sam