我有这场比赛
$line =~ s/(.*?$)/$1\n(\s){$array[0]}/;
给出错误
Unrecognized escape \s passed through
有人可以告诉我为什么使用$1
会抛出此错误。在我的文本编辑器中,如果我添加或删除$1
(颜色在特殊解释字符时表示颜色),颜色也会发生变化。
另外,(\s){$array[0]}
是正确的说法,我想要多次空格($ array [0]中的数字)。
感谢。
答案 0 :(得分:3)
替换s///
的右侧不是正则表达式模式。您不能告诉它使用模式语法创建内容。
无法识别的逃脱通过...
传递
此错误意味着Perl将\s
解释为类似于插值字符串内的\n
或\r
的转义序列。替换的右侧与普通双引号""
字符串相同。 \s
没有意义,所以Perl抱怨道。所有括号和括号将显示为文字字符。当我在答案中进一步提供数据时,这就是结果。
foo
(s){4}
相反,您必须在替换时使用/e
标志,并提供Perl代码。 s///
的右侧将使用实际代码进行评估,结果将用作替换。您可以使用x
operator重复空格字符。请注意,整个右侧现在需要是一个有效的Perl表达式,因此您必须构造字符串并使用连接运算符.
。
$line =~ s/(.*?$)/"$1\n" . ( q{ } x $array[0] ) /e;
当我使用下划线而不是空格运行时,它看起来很奇怪。我不认为它做你想做的事。
my @array = ( 4 );
my $line = "foo";
$line =~ s/(.*?$)/"$1\n" . ( "_" x $array[0] ) /e;
print $line;
__END__
foo
____