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

Ala*_*ing 2 regex perl whitespace matching substitution

假设我有$str = "onetwo".

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

$str =~ s/
          one
          two
         /
          three
          four
         /x
Run Code Online (Sandbox Code Playgroud)

而不是"threefour",这产生"\nthree\nfour\n"(在哪里\n是换行符).基本上该/x选项忽略替换的匹配方的空白而不是替换方.如何忽略替换方面的空白?

ike*_*ami 11

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

s/
   one
   two
/
   'three' .
   'four'
/ex
Run Code Online (Sandbox Code Playgroud)

甚至:

s/
   one
   two
/
   clean('
      three
      four
   ')
/ex
Run Code Online (Sandbox Code Playgroud)

可能的实施clean:

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

  • @Lex Fridman,实际上,它很漂亮,所以我换了它.发布的版本应该是有用的.1)从每一行中删除前导空格.2)删除前导空行.3)删除尾随空白行. (2认同)