2012-02-13 11 views
8

So che le seguenti tre righe di codici mirano ad estrarre la stringa in $ valore e memorizzarla in $ header. Ma non so quali sono le differenze tra $value =~ s/^\s+//; e $value =~ s/\s+$//;.

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

"So che le seguenti tre linee di codici hanno lo scopo di estrarre la stringa in $ valore e conservarla in $ header" ... solo per la cronaca, non è così. Mirano a eliminare gli spazi bianchi dalle estremità del valore scalare $ e posizionarli nell'elemento $ i-es dell'array @header. – AmbroseChapel

risposta

10

Da perldoc perlfaq4:

Come faccio a togliere gli spazi dall'inizio/fine di una stringa?

Una sostituzione può farlo per voi. Per una singola riga, si desidera sostituire tutti gli spazi bianchi iniziali o finali con niente. È possibile farlo con un paio di sostituzioni:

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

potete anche scrivere che come una singola sostituzione, anche se si scopre la dichiarazione combinata è più lento rispetto a quelli separati. Che potrebbe non importa a voi, però:

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

In questa espressione regolare, l'alternanza corrisponde sia al all'inizio o alla fine della stringa in quanto le ancore hanno una minore la precedenza rispetto l'alternanza. Con la bandiera, la sostituzione fa tutte le corrispondenze possibili, quindi ottiene entrambe. Ricordare che la nuova riga iniziale corrisponde allo \s+ e che l'ancoraggio $ può corrispondere alla fine assoluta della stringa , pertanto anche la nuova riga scompare.


E da perldoc perlrequick:

Per specificare dove dovrebbe corrispondere, useremmo l'ancora metacaratteri ^ e $. L'ancoraggio ^ significa corrispondenza allo inizio della stringa e l'ancoraggio $ significa corrispondenza alla fine di la stringa o prima di una nuova riga alla fine della stringa. Alcuni esempi:

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

^significa inizia con $ significa che termina con questa stringa.

+0

Hai descritto '\ z', non' $ '. '$' corrisponde alla fine della stringa o prima di una nuova riga alla fine della stringa. – ikegami

1

Il primo sostituirà solo spazi bianchi all'inizio della riga.

Problemi correlati