2012-06-25 20 views
10

Quiero saber el significado de las variables especiales Perl $-[0] y $+[0]

he buscado en Google y encontró que $- representan el número de líneas a la izquierda en la página y $+ representan el último par que coincide con el último patrón de búsqueda.

Pero mi pregunta es qué significa $-[0] y $+[0] en el contexto de expresiones regulares.

Avíseme si se requiere el código de muestra.

+1

¿Ha leído el perldoc perlvar? http://perldoc.perl.org/perlvar.html El ejemplo en '$ + [0]' es bastante claro. –

+0

Debe estar más familiarizado con [manual] [1]. –

+5

Las variables que estás buscando son '@ -' y' @ + '. – flesk

Respuesta

13

Ver perldoc perlvar sobre @+ y .

$+[0] es la compensación en la cadena del final de la coincidencia completa.

$-[0] es la compensación del inicio de la última coincidencia exitosa.

8

Ambos son elementos de una matriz (indicados por corchetes y número), por lo que desea buscar @ - (la matriz) y no $ - (una variable escalar no relacionada).

El commend

perldoc perlvar 

explica variables especiales de Perl. Si busca allí por @, lo encontrará.

$-[0] is the offset of the start of the last successful match. $-[n] is the offset of the start of the substring matched by n-th subpattern, or undef if the subpattern did not match.

4

ejemplo Adición para una mejor comprensión de $-[0], $+[0]

también la adición de información sobre variables $+

use strict; 
use warnings; 

my $str="This is a Hello World program"; 
$str=~/Hello/; 

local $\="\n"; # Used to separate output 

print $-[0]; # $-[0] is the offset of the start of the last successful match. 

print $+[0]; # $+[0] is the offset into the string of the end of the entire match. 

$str=~/(This)(.*?)Hello(.*?)program/; 

print $str; 

print $+;     # This returns the last bracket result match 

Salida:

D:\perlex>perl perlvar.pl 
10       # position of 'H' in str 
15       # position where match ends in str 
This is a Hello World program 
World 
+1

gracias por el buen ejemplo ... el el concepto de @ + @ - $ - $ + es completamente claro para mí ahora ... pero esto definitivamente ayudará a los futuros visitantes +1 – AnonGeek