1

配列要素部分のマッチングについて質問があります。

私は2つの配列を持っています:

@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" を出力します (MIT が一致するため)

SCHMITTY が @2 にある場合: "SCHMITTY" を表示 (MIT が一致するため)

JONESが@2にある場合:空欄(一致するものがないため)

4

1 に答える 1

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/;
}
于 2012-09-14T22:45:18.730 に答える