pattern regex perl

regex - pattern - ¿Qué significa $ 1 en Perl?



perl g (9)

$ 1, $ 2, etc. contendrán el valor de las capturas de la última coincidencia exitosa ; es importante verificar si la coincidencia tuvo éxito antes de acceder a ellas, es decir,

if ( $var =~ m/( )/ ) { # use $1 etc... }

Un ejemplo del problema: $ 1 contiene ''Rápido'' en ambas declaraciones de impresión a continuación:

#!/usr/bin/perl ''Quick brown fox'' =~ m{ ( quick ) }ix; print "Found: $1/n"; ''Lazy dog'' =~ m{ ( quick ) }ix; print "Found: $1/n";

¿Qué significa $ 1 en Perl? Además, ¿qué significa $ 2? ¿Cuántas variables de $ number hay?


Como otros han señalado, los $ x son variables de captura para expresiones regulares que le permiten hacer referencia a secciones de un patrón coincidente.

Perl también admite capturas con nombres que podrían ser más fáciles de recordar para los humanos en algunos casos.

entrada dada: 111 222

/(/d+)/s+(/d+)/

$ 1 es 111

$ 2 es 222

También se podría decir:

/(?<myvara>/d+)/s+(?<myvarb>/d+)/

$ + {myvara} es 111

$ + {myvarb} es 222


En general, las preguntas sobre las variables "mágicas" en Perl se pueden responder buscando en la documentación de variables predefinidas de Perl a la:

perldoc perlvar

Sin embargo, cuando busque esta documentación por $ 1, etc. Encontrará referencias en varios lugares, excepto en la sección de estas variables de "dígitos". Tienes que buscar

$<digits>

Hubiera agregado esto a la respuesta de Brian ya sea comentando o editando pero no tengo suficientes representantes. Si alguien agrega esto, eliminaré esta respuesta.


Estos se llaman "Variables de coincidencia". Como se mencionó anteriormente, contienen el texto de su última coincidencia de expresión regular.

Más información aquí: http://cslibrary.stanford.edu/108/EssentialPerl.html

(CTRL-F para ''Variables coincidentes'' para encontrar la sección correspondiente)


Las variables $ 1 .. $ 9 también son variables de solo lectura por lo que no puede asignarles un valor implícito:

$ 1 = ''foo''; imprimir $ 1;

Eso devolverá un error: modificación de un valor de solo lectura intentada en la línea de script 1.

Tampoco puede usar números para el comienzo de nombres de variables:

$ 1foo = ''foo''; imprimir $ 1foo;

Lo anterior también devolverá un error.


Las variables numéricas son las coincidencias de la última coincidencia exitosa o el operador de sustitución que aplicó:

my $string = ''abcdefghi''; if( $string =~ /(abc)def(ghi)/ ) { print "I found $1 and $2/n"; }

Siempre pruebe que la coincidencia o sustitución fue exitosa antes de usar $ 1 y así sucesivamente. De lo contrario, podría recoger los restos de otra operación.

Las expresiones regulares de Perl están documentadas en perlre .


Sospecho que puede haber hasta 2**32 -1 variables de coincidencia numeradas, en un binario Perl compilado de 32 bits.


Ya que le preguntaste a los grupos de captura, es posible que desees saber acerca de $ + también ... Bastante útil ...

use Data::Dumper; $text="hiabc ihabc ads byexx eybxx"; while($text=~/(hi|ih)abc|(bye|eyb)xx/igs) { print Dumper $+; }

SALIDA:
$ VAR1 = ''hola'';
$ VAR1 = ''ih'';
$ VAR1 = ''bye'';
$ VAR1 = ''eyb'';


Las variables $number contienen las partes de la cadena que coinciden con los grupos de captura ( ... ) en el patrón para su última coincidencia de expresiones regulares si la coincidencia fue exitosa.

Por ejemplo, tome la siguiente cadena:

$text = "the quick brown fox jumps over the lazy dog.";

Después de la declaración

$text =~ m/ (b.+?) /;

$1 es igual al texto " brown ".