我在一行中有一些子串[ aa bb cc ]
,例如$line = "1 2 a b [ aa bb cc ] c d [ bb cc ] 3 4"
。我想修剪这些子串中的所有空格。以下代码不起作用。
while($line =~ /\[(.*?)\]g/)
{
$1 =~ s/\s+//g;
}
有人可以帮忙吗
答案 0 :(得分:7)
s{\[(.*?)\]}{
my $s = $1;
$s =~ s/\s+//g;
$s
}eg;
答案 1 :(得分:2)
与您的尝试类似的另一种方式:
while($line =~ s/\[([^\]\s]*)\s+/[$1/g) {}
并且您不必逃离r方括号,但它有助于vim。
答案 2 :(得分:0)
您的方法失败,因为匹配变量$1
是只读的。您可以使用非破坏性替换(在Perl 5.16中引入)来避免该问题:
use warnings;
use strict;
my $line = "[foo bar] [ baz ] sproing";
while($line =~ /\[(.*?)\]/g)
{
my $result = $1 =~ s/\s+//gr;
print "|$result|\n";
}