爲什麼這不起作用?如何用Perl中的單個空格替換多個空格?
$data = "What is the STATUS of your mind right now?";
$data =~ tr/ +/ /;
print $data;
爲什麼這不起作用?如何用Perl中的單個空格替換多個空格?
$data = "What is the STATUS of your mind right now?";
$data =~ tr/ +/ /;
print $data;
改爲使用$data =~ s/ +/ /;
。
說明:
的tr
是translation操作。關於這一點需要注意的一點是,正則表達式修飾符不適用於翻譯語句(除-
之外,它仍指示範圍)。所以當你使用
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;
的地方。
您還可以使用tr
和「squash」選項,該選項將刪除重複的替換字符。有關詳細信息,請參閱perlop。
my $s = "foo bar fubb";
$s =~ tr/ //s;
Perl 5.10的有一個新的字符類,\h
,看臺水平空白這是這種事情很好:
$s =~ s/\h+/ /g;
非常好的解釋,給點意見。 – TCM 2010-10-02 18:24:15