トップページに戻る
次の正規表現パズルへ
前の正規表現パズルへ
8-8 組み込みコードで最長マッチの表示
正規表現パズル
Perlで最長マッチを行います。
詳説正規表現2版の325ページ
詳説正規表現3版の328ページ
を参考にさせていただきました。
解説
組み込みコードでマッチ結果の文字列を保存しつつ、
最大長のマッチ結果を求めてます。
Perlでのソースと実行結果
use re 'eval';
$ConstRegex = '(AB|ABBB|ABC)';
@hairetu = ();
push(@hairetu,'ABC');
push(@hairetu,'ABBB');
push(@hairetu,'AB');
push(@hairetu,'DD');
print ("Pattern $ConstRegex\n");
for ($i=0; $i <= @hairetu-1; $i++) {
$longestMatch = undef;
$LineNo = $i+1;
$willOut = "Line$LineNo $hairetu[$i] ";
$hairetu[$i] =~ m/$ConstRegex
(?{if (not defined($longestMatch)
or
length($&) > length($longestMatch)){
$longestMatch = $&;
}
})(?!)/x;
if (defined($longestMatch)){
$willOut .= "matchs $longestMatch";
}
else{
$willOut .= 'no match'
}
print "$willOut\n";
}
#実行結果
Pattern (AB|ABBB|ABC)
Line1 ABC matchs ABC
Line2 ABBB matchs ABBB
Line3 AB matchs AB
Line4 DD no match