嗨我的程序有问题,我已经编写了下面的代码并返回了预期的结果。但是我只对比赛的第一次和最后一次比赛感兴趣。我该怎么做呢?
foreach (@array)
{
$element = $_;
foreach(@array2)
{
if($_ =~ s/($element)//ig)
{
print "$_ \n";
}
}
}
目前循环遍历数组中的每个元素在第二个数组中找到它并打印整行。它返回预期的结果,但我想要第一个匹配和最后一个匹配。
答案 0 :(得分:1)
foreach my $elm2 (@array2) {
my $state = 'start';
my $first, $last;
foreach my $elm1(@array1) {
if (($state eq 'start') && ($elm1 =~ m/$elm2/i)) {
$first = "$elm1";
$state = 'last';
}
elsif (($state eq 'last') && ($elm1 =~ m/$elm2/i)) {
$last = $elm1;
}
}
print "$elm2,$first,$last\n";
}
答案 1 :(得分:0)
可能会这样做
foreach (@array)
{
$first = "";
$last = "";
$element = $_;
foreach(@array2)
{
if($_ =~ s/($element)//ig)
{
if (!length($first)){
$first = $_;
}
else {
$last = $_;
}
}
}
if (length($first) && length($last)) {
print "\n----------\nfirst = '$first'\nlast = '$last'";
}
}
答案 2 :(得分:0)
完全忘记了grep。
foreach my $elm2 (@array2) {
my @matches = grep(/$elm2/i, @array1);
if (@matches && (scalar (@matches > 1))) {
print "$elm2,$matches[0], $matches[-1]\n";
}
elsif (@matches) {
print "$elm2,$matches[0]\n";
}
else {print "no matches\n";};
}
答案 3 :(得分:0)
有点晚了,但这是我认为你可以使用的
查找第一场比赛
if ($_ =~ m/($element)/) { print $1; }
查找最后一场比赛
if ($_ =~ m/.*($element)/) { print $1; }
答案 4 :(得分:0)
假设您要检查@array2
中哪些元素与@array
中的任何模式匹配并打印其中的第一个和最后一个,最简单的方法是从{{{}}的内容构建一个交替正则表达式1}}并使用它过滤@array
。
喜欢这个
@array2