如何在perl中单独替换顺序空格

时间:2014-03-04 11:31:26

标签: perl substitution

我想用“\”替换“a b”中的每个空格,预期输出为“a \ \ \ b”。
我尝试了以下代码,但输出不满足。

#!usr/bin/perl -w
use CGI;
my $q = CGI -> new;
print $q -> header();
$input = "a   b";
(my $output = $input) =~ s/\ /\\ /;

输出为“a \ b”但不是“a \ \ \ b” 我怎样才能做到对不对?

2 个答案:

答案 0 :(得分:1)

$input = "a   b";

$input =~ s/\s/\\/g;

经过测试和工作,我的测试代码

#!/usr/bin/perl

$abc = "a          b";

 $abc =~ s/\s/\\/g;

print $abc, "\n";

Cerberus:~ alexmac$ ./testaaa.pl
a\\\\\\\\\\b

这应该很适合你。我们的想法是匹配\ s,它会一遍又一遍地执行它,直到匹配任何类型的字符,空白字符集regular expressions

答案 1 :(得分:1)

首先,正如之前的回答者已经提到的那样,你只是在替换正则表达式上缺少/ g(“全局”)修饰符。

alex@yuzu:~$ perl -E '$str = "a   b"; $str =~ s/ /\\ /g; say $str;'
a\ \ \ b

然而更进一步,我想知道你是否想要逃避空格以外的角色。在这种情况下,您可能希望使用quotemeta()内置。

alex@yuzu:~$ perl -E '$str = q{a   b   ()+?$@%}; say quotemeta $str;'
a\ \ \ b\ \ \ \(\)\+\?\$\@\%

有关详细信息,请参阅perldoc quotemeta