Perlで2つの文字列から最長共通部分を抜き出す関数を書いてみました
2つの文字列を比較して、最長の共通部分(Longest Common SubString (?) )を1つ抜き出す関数を書いてみました。
例えば以下の2つの文字列を比較した場合に、
・Perl で複数の文字列から共通部分を抜き出そう - 知らないことがあってもへっちゃらさ
・Perl で楽々、圧縮・解凍( Zip だけど) - 知らないことがあってもへっちゃらさ
「 - 知らないことがあってもへっちゃらさ」 を抜き出したいわけです。
使い方は以下の要領で。
マルチバイトの文字列を処理する場合は、引数は先にEncodeモジュールを使ってデコードしておきます。また、戻り値のエンコードについても、呼び出し側で行います。
ソースの一部が冗長になってますが、処理を1つの関数に収めたかったので、今回は妥協しました。
問題点は、最長共通部分が複数あった場合なんですが・・・。上記関数では、早く見つかった方が生き残る仕様になっております。えぇ、複数の最長共通部分を返すいい方法が思いつかなかったんですよ・・・orz
ホントは何とかしたかったんですけどねぇ。そのうちに何か思いついたら、挑戦してみたいと思います。
追記:2011/05/07
複数の最長共通部分を取得できるようにしたバージョンは以下のリンクから
Perlで2つの文字列から最長共通部分を抜き出す関数を書いてみました(第2版)