为什么这不起作用?
$data = "What is the STATUS of your mind right now?";
$data =~ tr/ +/ /;
print $data;
答案 0 :(得分:29)
改为使用$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
执行您正在寻找的内容,通过说“匹配任意数量的连续空格(至少一个实例)并用单个空格替换它们”。您可能还想使用类似的东西
s/ +/ /g;
如果您希望替换发生多个地方(g
表示全局申请)。
答案 1 :(得分:12)
您还可以将tr
与“squash”选项一起使用,这将删除重复的替换字符。有关详细信息,请参阅perlop。
my $s = "foo bar fubb";
$s =~ tr/ //s;
答案 2 :(得分:7)
Perl 5.10有一个新的字符类\h
,代表水平空白,这对于这类事情是很好的:
$s =~ s/\h+/ /g;