用\ s替换不能按预期工作

Min*_* Le 1 regex perl

我写正则表达式来删除字符串中的多个空格.代码很简单:

my $string = 'A string has more than 1      space';
$string = s/\s+/\s/g;
Run Code Online (Sandbox Code Playgroud)

但是,结果是坏事:'Asstringshassmoresthans1sspace'.它用's'字符替换每个空格.

有一个解决方法,而不是使用\ s进行替换,我使用''.所以正则表达式变成:

$string = s/\s+/ /g;
Run Code Online (Sandbox Code Playgroud)

为什么正则表达式不起作用?

Tim*_*ker 7

\s只是正则表达式中的元字符(它不仅仅匹配一个空格,例如制表符,换行符和换页符),而不是替换字符串.如果要用单个空格替换所有空格,请使用简单空格(如您所做):

$string = s/\s+/ /g;
Run Code Online (Sandbox Code Playgroud)

如果您只想影响实际的空格字符,请使用

$string = s/ {2,}/ /g;
Run Code Online (Sandbox Code Playgroud)

(无需用自己替换单个空格).