マッチした正規表現の一部を取り出す。
チームリーダがPerlで悶えているので話を聞いてみる。
どうも以下のようなことをしたいらしい。
my $data = 'Abc.dEf.gHI.com'; $data =~ m/ghi.com|def.ghi.com/i; とした際に、マッチした正規表現のパターンで最長のものを取得したい。 (この場合は"def.ghi.com"を取得したい)
評価した文字列のどこがマッチしたかを調べるのであれば、
マッチ変数の"$&"を使えばいい。
が、今回の場合はそれだと、"dEf.gHI.com"が取得される。
で、何とかならんかと、以下のような実装を考えてみました。
use strict; use warnings; my $pattern = "ghi.com|def.ghi.com"; my $data = "Abc.dEf.gHI.com"; my @sorted = sort {length $a >= length $b} grep { $data =~ /$_/i } split(/\|/, $pattern); print pop(@sorted);
パターンの書き方がかなり限定されてしまうのが難点。
というか別に無理にsplitなんかしなくても最初から@arrayで渡せばいいのかw