2012-02-13 141 views
8

我知道以下三行代碼旨在將字符串提取到$ value並將其存儲在$ header中。但我不知道$value =~ s/^\s+//;$value =~ s/\s+$//;之間有什麼區別。

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

「我知道下面三行代碼的目的是提取字符串到$值,並將其存儲在$頭」 ...只是備案,他們沒有。他們的目標是從標量$ value的末尾去掉空白,並將它放在數組@header的$ i-th元素中。 – AmbroseChapel 2012-02-14 09:33:41

回答

10

perldoc perlfaq4

如何從一個字符串的開始/結束剝離空白?

一個替代可以爲你做這個。對於單行,您想要 全部替換所有前導或尾隨空白。您可以 做與對取代的:

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

你也可以寫,作爲一個單獨置換,但事實證明 出來的合併報表比單獨的慢一些。這 也許不事給你,但:

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

在這個正則表達式,交替在 開頭或字符串的結尾匹配要麼自錨具有比交替較低 優先級。使用/g標誌,替換 會進行所有可能的匹配,因此它將同時獲得。請記住,尾隨的 換行符與\s+匹配,並且$錨可以匹配到字符串絕對末尾的 ,因此換行符也消失。


而且從perldoc perlrequick

要指定它應該匹配,我們將使用錨 元字符^$。錨點^表示匹配字符串的起始位置 ,錨點$表示匹配字符串末尾的 ,或匹配字符串末尾的換行符。一些 例子:

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

^表示開始於,$表示以此字符串結尾。

+0

你描述過'\ z',而不是'$'。 '$'匹配字符串的末尾或字符串末尾的換行符。 – ikegami 2012-02-14 05:56:27

1

第一個只會替換行首的空格。

相關問題