在我的Perl程序中,我在数组中有以下要删除的变量:
$array[0] = "--_000_41DADE848657754488503BD616F1ADE607250A88abmail2k7adventure_--";
$array[1] = "--_000_41DADE848657754488503BD616F1ADE607317EE6abmail2k7adventure_";
$array[2] = "--_000_41DADE848657754488503BD616F1ADE6073C5F3Babmail2k7adventure_--";
对于不同的输入数据,我得到了与之类似的不同元素。如何通过使用单个正则表达式来消除它们?我是正则表达式的初学者,我尝试了以下但是它按预期工作。
$array =~ s/--_000_ .* adventure_--//g;
答案 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;
我刚删除了周围的空间。*