为什么这不起作用?
$data = "What is the STATUS of your mind right now?";
$data =~ tr/ +/ /;
print $data;发布于 2010-10-03 02:09:59
请改用$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表示全局应用)。
发布于 2010-10-03 02:39:44
您还可以使用带有"squash“选项的tr,这将删除重复替换的字符。详情请参见perlop。
my $s = "foo bar fubb";
$s =~ tr/ //s;发布于 2010-10-06 01:39:39
Perl5.10有一个新的字符类,\h,代表水平空格,这对这类事情很好:
$s =~ s/\h+/ /g;https://stackoverflow.com/questions/3846931
复制相似问题