2010-10-02 141 views

回答

28

改爲使用$data =~ s/ +/ /;

說明:

trtranslation操作。關於這一點需要注意的一點是,正則表達式修飾符不適用於翻譯語句(除-之外,它仍指示範圍)。所以當你使用
tr/ +/ /你會說「把每個字符空間的實例和+並將它們翻譯成一個空間」。換句話說,tr認爲空間和+作爲單個字符,不是的正則表達式。

示範:

$data = "What is the STA++TUS of your mind right now?"; 

$data =~ tr/ +/ /; 

print $data; #Prints "What is the STA TUS of your mind right now?" 

使用s做你在找什麼,說「匹配任何數量的連續空間(至少一個實例),並用一個空格代替他們」。如果您希望發生替換的地點不止一個(g表示全局應用),您可能還想使用類似
s/ +/ /g;的地方。

+1

非常好的解釋,給點意見。 – TCM 2010-10-02 18:24:15

11

您還可以使用tr和「squash」選項,該選項將刪除重複的替換字符。有關詳細信息,請參閱perlop

my $s = "foo  bar fubb"; 
$s =~ tr/ //s; 
6

Perl 5.10的有一個新的字符類,\h,看臺水平空白這是這種事情很好:

$s =~ s/\h+/ /g; 
相關問題