2012-02-13 27 views
8

Sé que las siguientes tres líneas de códigos tienen como objetivo extraer la cadena en $ valor y almacenarla en $ encabezado. Pero no sé cuáles son las diferencias entre $value =~ s/^\s+//; y $value =~ s/\s+$//;.

$value =~ s/^\s+//; 
$value =~ s/\s+$//; 
$header[$i]= $value; 
+0

"Sé que las siguientes tres líneas de códigos tienen como objetivo extraer la cadena de valor en $ y almacenarlo en $ encabezado" ... sólo para que conste, no lo hacen. Apuntan a quitar el espacio en blanco de los extremos del valor $ escalar y colocarlo en el elemento $ i-ésimo de la matriz @ cabecera. – AmbroseChapel

Respuesta

10

De perldoc perlfaq4:

¿Cómo me tira espacio en blanco desde el principio/final de una cadena?

Una sustitución puede hacer esto por usted. Para una sola línea, desea reemplazar todos los espacios en blanco iniciales o finales sin nada. Puede hacer eso con un par de sustituciones:

s/^\s+//; 
s/\s+$//; 

También puede escribir que a medida que una única sustitución, aunque resulta a cabo la expresión combinada es más lento que los juegos independientes. que no podría ser importante para usted, sin embargo:

s/^\s+|\s+$//g; 

En esta expresión regular, la alternancia de los partidos, ya sea en el principio o al final de la cadena ya que los anclajes tienen una menor precedencia que la alternancia. Con la bandera /g, la sustitución hace todas las coincidencias posibles, por lo que obtiene ambas. Recuerde, la nueva línea final coincide con \s+, y el ancla $ puede coincidir con el extremo absoluto de la cadena, por lo que la nueva línea también desaparece.


Y desde perldoc perlrequick:

para especificar dónde debe coincidir, usaríamos el ancla metacaracteres ^ y $. El ancla ^ significa que coincide en el principio de la cadena y el ancla $ significa que coincide al final de la cadena, o antes de una nueva línea al final de la cadena. Algunos ejemplos:

"housekeeper" =~ /keeper/;   # matches 
"housekeeper" =~ /^keeper/;  # doesn't match 
"housekeeper" =~ /keeper$/;  # matches 
"housekeeper\n" =~ /keeper$/;  # matches 
"housekeeper" =~ /^housekeeper$/; # matches 
1

^significa que comienza con, $ significa que termina con esta cadena.

+0

Ha descrito '\ z', no' $ '. '$' coincide con el final de la cadena o antes de una nueva línea al final de la cadena. – ikegami

1

El primero solo reemplazará los espacios en blanco al comienzo de la línea.

Cuestiones relacionadas