我[ aa bb cc ]
在一行中有一些子字符串,比如$line = "1 2 a b [ aa bb cc ] c d [ bb cc ] 3 4"
. 我想修剪这些子字符串中的所有空格。以下代码不起作用。
while($line =~ /\[(.*?)\]g/)
{
$1 =~ s/\s+//g;
}
有人可以帮忙吗
s{\[(.*?)\]}{
my $s = $1;
$s =~ s/\s+//g;
$s
}eg;
与您的尝试类似的另一种方式:
while($line =~ s/\[([^\]\s]*)\s+/[$1/g) {}
而且您不必转义 r 方括号,但它有助于 vim。
您的方法失败,因为匹配变量$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";
}