スマートかどうかは知らんけど、俺は正規表現を複雑にするよりforeachする。
foreach my $key (@array){
  m/.*($key)(.*?)/i
}