2012-07-09 13 views
21

tengo una expresión regular que coincide con un texto como:Perl Regular Expression - ¿Qué significa modificador de gc?

$text =~ m/$regex/gcxs 

Ahora quiero saber lo que significa 'GC' modificador:

He buscado y encontrado que gc significa "Permitir búsqueda continua después del partido fallido/g ".

Esto no es claro para mí. ¿Qué significa búsqueda continua?

Por lo que he entendido, significa que comienza la coincidencia al principio si la búsqueda /g falla. ¿Pero el modificador /g no coincide con toda la cadena?

Respuesta

32

El modificador /g se utiliza para recordar la "posición en una cadena" para que pueda procesar una cadena de forma incremental. p.ej.

my $txt = "abc3de"; 
while($txt =~ /\G[a-z]/g) 
{ 
    print "$&"; 
} 
while($txt =~ /\G./g) 
{ 
    print "$&"; 
} 

Debido a que la posición se pone a cero en un partido fracasado, lo anterior es la salida

abcabc3de 

La bandera /c no restablece la posición en un partido fracasado. Así que si añadimos /c a la primera expresión regular al igual que

my $txt = "abc3de"; 
while($txt =~ /\G[a-z]/gc) 
{ 
    print "$&"; 
} 
while($txt =~ /\G./g) 
{ 
    print "$&"; 
} 

Terminamos con código

abc3de 

muestra: http://ideone.com/cC9wb

+1

gracias por buena explicación – AnonGeek

+0

Esta respuesta ha sido añadido a la [desbordamiento de pila FAQ expresión regular] (http://stackoverflow.com/a/22944075/2736496), bajo "modificadores ". – aliteralmind

3

En el perldoc perlre http://perldoc.perl.org/perlre.html#Modifiers

coincidencia global y mantener la posición actual después de la coincidencia fallida. A diferencia de i, m, s y x, estos dos indicadores afectan la forma en que se utiliza la expresión regular en lugar de la expresión regular. Consulte Uso de expresiones regulares en Perl en perlretut para obtener una explicación más detallada de los modificadores g y c.

el árbitro especificado conduce a:

http://perldoc.perl.org/perlretut.html#Using-regular-expressions-in-Perl

Este URI tiene un sub-sección titulada 'coincidente Global' que contiene un ejemplo pequeño tutorial/de trabajo, incluyendo:

Una coincidencia fallida o el cambio de la cadena de destino restablece la posición. Si no desea restablecer la posición después de que no coincida, agregue la // c, como en/regexp/gc. La posición actual en la cadena está asociada con la cadena, no con la expresión regular. Esto significa que diferentes cadenas tienen diferentes posiciones y sus posiciones respectivas se pueden establecer o leer de forma independiente.

HTH Lee

Cuestiones relacionadas