0

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

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

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

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

3 回答 3

2

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

my @new = grep !/^--_000_ .* adventure_--/, @array;
于 2012-07-10T18:50:02.603 回答
1

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

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

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

或使用 grep:

my @newarray = grep !/^--_000_ .* adventure_--/, @array;
于 2012-07-10T18:53:03.077 回答
0

好吧,这听起来可能很愚蠢。但是下面的模式奏效了!

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

我刚刚删除了 .* 周围的空格

于 2012-07-10T18:53:13.003 回答