我想用“\”替换“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” 我怎样才能做到对不对?
答案 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
。