如何将array1中的元素部分与array2中的元素进行匹配?

时间:2012-09-14 22:25:43

标签: arrays perl element matching

我有一个关于匹配数组元素部分的问题。

我有两个数组:

@ 1 = SMITH SMIT MITH SMI MIT ITH(姓SMITH的部分)

@ 2 = 150,000个姓氏的列表

我需要在@ 2中搜索@ 1中的元素,然后从@ 2打印整个匹配的姓氏。

例如:

如果SMITHERS在@ 2中:打印“SMITHERS”(因为SMITH,SMIT,MITH,SMI,MIT,ITH匹配)

如果MITCHELL在@ 2中:打印“MITCHELL”(因为麻省理工学院匹配)

如果SCHMITTY在@ 2中:打印“SCHMITTY”(因为麻省理工学院匹配)

如果JONES在@ 2中:空白(因为没有匹配)

1 个答案:

答案 0 :(得分:2)

use feature qw( say );

my @a1 = qw( SMITH SMIT MITH SMI MIT ITH );
my @a2 = qw( SMITHERS MITCHELL SCHMITTY JONES );

my $pat =
   join '|',
     map quotemeta,
      sort { length($b) <=> length($a) }
        @a1;

my $re = qr/$pat/;

for (@a2) {
   say if /$re/;
}

顺便说一句,可以按如下方式创建足够准确的@a1

use feature qw( say );

my $a1 = 'SMITH';
my @a2 = qw( SMITHERS MITCHELL SCHMITTY JONES );

my $pat =
   join '|',
     map quotemeta,
      $a1 =~ /(?=(...))./sg;

my $re = qr/$pat/;

for (@a2) {
   say if /$re/;
}