[英]How to substitute sequential spaces individually in perl
我想用“\\”替换“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”。
我该怎么做对吗?
嗯
$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,它会一遍又一遍地执行它,直到匹配任何\\ s类型字符,空白字符集正则表达式
首先,正如之前的回答者已经提到的那样,你只是在替换正则表达式上缺少/ 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
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.