繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM