使用Perl的grep删除数组中的字符串

时间:2013-09-26 09:34:09

标签: perl grep

我有以下数组:

$arry = [
      '',
      'foo',
      'bar',
      'ion'
    ];

我想要删除"" ionbar。 但为什么失败呢?

my @new = grep {!/ |ed|ion/} @$arry;

打印:

$VAR1 = [
          '',
          'foo',
          'bar'
        ];

在此测试:https://eval.in/50792

3 个答案:

答案 0 :(得分:4)

您的grep离开了元素'''foo''bar'。这是因为它正在删除包含单个空格的元素'ed''ion'。你的数组的一个元素符合这个标准:最后一个,'ion'。所以只删除了这个。

也许你想要

my @new = grep { $_ ne '' and $_ ne 'ion' and $_ ne 'bar' } @$arry;

my @new = grep $_ !~ /\A(?:|ion|bar)\z/, @$arry;

答案 1 :(得分:3)

试试这个:

my @new = grep {!/^$|ed|ion/} @$arry;

答案 2 :(得分:1)

如果您想保留edition之类的字词,请使用:

my @new = grep {!/^$|\b(?:ed|ion)\b/} @$arry;