Perl忽略正则表达式替换的替换侧的空格

时间:2011-09-03 00:49:18

标签: regex perl whitespace matching substitution

假设我有$str = "onetwo"

我想编写一个忽略空格的reg ex替换命令(这使得它更具可读性):

$str =~ s/
          one
          two
         /
          three
          four
         /x

而不是"threefour",这会产生"\nthree\nfour\n"(其中\n是换行符)。基本上/x选项会忽略替换的匹配方的空白而不是替换方。我怎样才能忽略替换方面的空白?

1 个答案:

答案 0 :(得分:11)

s{...}{...}基本上是s{...}{qq{...}}e。如果您不想要qq{...},则需要将其替换为其他内容。

s/
   one
   two
/
   'three' .
   'four'
/ex

甚至:

s/
   one
   two
/
   clean('
      three
      four
   ')
/ex

clean的可能实现:

sub clean {
    my ($s) = @_;
    $s =~ s/^[ \t]+//mg;
    $s =~ s/^\s+//;
    $s =~ s/\s+\z//;
    return $s;
}