2007/05/15(火) Replaceの正規表現

backup_mixiでダウンロードしたmixiのファイルをNamazuで検索する場合、IEからだと、他のドライブにジャンプすることはできないので、直接mixiへジャンプするようにnamazurcのReplaceを以下のように設定した。

Replace  (/[A-Za-z]\|.*/)(diary)/(.*)(.html)  http://mixi.jp/view_diary.pl?id=\3&owner_id=自分のmixiID
Replace  (/[A-Za-z]\|.*/)(.*)/(.*)(.html)  http://mixi.jp/view_message.pl?id=\3&box=\2

日本語プログラミング言語なでしこで検索ツールを作っているのだが、なでしこの場合、Namazuが出力したHTMLファイルを上と同じように書き換えるには以下のようにする必要があった。

「(/[A-Za-z]\|.*/)(diary)/(.*)(.html)」を「http://mixi.jp/view_diary.pl?id=$3&owner_id=自分のmixiID」に正規表現置換
「(<.*")(http.*=)(.*)(&owner_id=自分のmixiID)(</a>)」を「$1$2$3$4">$2$3$4$5」に正規表現置換
「(/[A-Za-z]\|.*/)(inbox)/(.*)(.html)」を「http://mixi.jp/view_message.pl?id=$3&box=$2」に正規表現置換
「(<.*")(http.*id=)(.*=inbox)(</a>)」を「$1$2$3">$2$3$4」に正規表現置換
「(/[A-Za-z]\|.*/)(savebox)/(.*)(.html)」を「http://mixi.jp/view_message.pl?id=$3&box=$2」に正規表現置換
「(<.*")(http.*id=)(.*=savebox)(</a>)」を「$1$2$3">$2$3$4」に正規表現置換
「(/[A-Za-z]\|.*/)(outbox)/(.*)(.html)」を「http://mixi.jp/view_message.pl?id=$3&box=$2」に正規表現置換
「(<.*")(http.*id=)(.*=outbox)(</a>)」を「$1$2$3">$2$3$4」に正規表現置換
「(/[A-Za-z]\|.*/)(thrash/)/(.*)(.html)」を「http://mixi.jp/view_message.pl?id=$3&box=$2」に正規表現置換
「(<.*")(http.*id=)(.*=thrash)(</a>)」を「$1$2$3">$2$3$4」に正規表現置換

ローカルのパスを置換するのと、HTMLファイルの中を置換する違いがある。なでしこが長くなるのは最初の変換でリンク部分(Aタグ)の変換がうまくできないため。最長マッチになるので、変換すべきでないところまで変換してしまうのだ。うまく書けば、そうならないのかもしれないが、どう考えてもnamazurcで設定した方がすっきりしているので、こちらを採用。