用于替换多个元素的通用RegEx模式

时间:2012-07-10 18:35:23

标签: regex perl

在我的Perl程序中,我在数组中有以下要删除的变量:

$array[0] = "--_000_41DADE848657754488503BD616F1ADE607250A88abmail2k7adventure_--";
$array[1] = "--_000_41DADE848657754488503BD616F1ADE607317EE6abmail2k7adventure_";
$array[2] = "--_000_41DADE848657754488503BD616F1ADE6073C5F3Babmail2k7adventure_--";

对于不同的输入数据,我得到了与之类似的不同元素。如何通过使用单个正则表达式来消除它们?我是正则表达式的初学者,我尝试了以下但是它按预期工作。

$array =~ s/--_000_ .* adventure_--//g;

3 个答案:

答案 0 :(得分:2)

如果要从列表中删除特定类型的元素,可以使用grep

my @new = grep !/^--_000_ .* adventure_--/, @array;

答案 1 :(得分:1)

我想您要删除与该模式匹配的所有元素?

还有其他简写方法可以做到这一点,但最简单的理解可能是创建一个新数组,同时清空旧数组,或者使用循环:

my @newarray= ();
while ($elem = shift @array) {
    push @newarray, $elem if ($elem !~ /^--_000_ .* adventure_--/);
}

或者使用grep:

my @newarray = grep !/^--_000_ .* adventure_--/, @array;

答案 2 :(得分:0)

嗯,这可能听起来很愚蠢。但是以下模式有效!

$array=~ s/--_000_.*adventure_//g;

我刚删除了周围的空间。*