perl可以用正则表达式替换多个子串吗?

时间:2013-04-23 04:12:44

标签: regex perl substring

我在一行中有一些子串[ aa bb cc ],例如$line = "1 2 a b [ aa bb cc ] c d [ bb cc ] 3 4"。我想修剪这些子串中的所有空格。以下代码不起作用。

while($line =~ /\[(.*?)\]g/)
{
  $1 =~ s/\s+//g;
}

有人可以帮忙吗

3 个答案:

答案 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";
}