2004-04-16 [長年日記]

[Q3] Pocket PC用の日本語化されたメニュー

TK-BLOG: QMail3 Ver.2.9.6用メニューの日本語化で、Pocket PC版でメニューを日本語化するためのmenus.xmlを公開してくださっています。ありがとうございます。

VGAだとPocket PCでも使い甲斐がありそうですね。

Estraier

全文検索エンジン。

正規表現メモ

昔も書いたような覚えもありますが、色々なツールでの正規表現の違いがまとめられています。

[Q3] さらに正規表現

こんなことを書いた舌の根も乾かないうちに、正規表現周りをさらにいじってしまいました^^;。

まずは簡単にできそうな、貪欲でない数量子(*?, +?, ??, {m,n}?)を。これはNFAのステートを処理するときに、ε遷移の方を優先させてマッチするほうをバックトラック用のスタックに突っ込んでおけば良さそうです。というわけで実装しました。

貪欲でない方をやったからには強欲な数量子(*+, ++, ?+, {m,n}+)もやりたいところ。こっちはマッチしたときにε遷移をバックトラック用のスタックに積まないようにすれば良さそうです。ただし、グループに適用された場合((x)*+とか)にはその部分だけは独立した正規表現として処理する必要がありそうです。ただし、キャプチャした情報は共有する必要があります。というわけで、実装。

(x)*+が独立した正規表現だとすると、(?>(x)*)と同じということになるので、これも自動的に実装されることになりました。

(?>x)は肯定先読みの(?=(x))\1と同じということで、実装はほぼ同じで次のマッチを始める位置だけが異なるだけなのでこれも実装。肯定先読みができれば否定先読みもできるのでこれも実装しました。

ここまでやったら後読みもやりたくなるのが人情です。現在のマッチ位置の後ろ側にマッチさせる必要がある程度で、やり方はほぼ先読みと一緒です。Perlのようにマッチする文字数は固定ということにするとその分だけ戻ってマッチさせればいいので楽なのですが、それもなんだかいまいちなので文字数は可変でも良い事にして、後ろ向きにシフトさせながらマッチするようにしました。

というわけで、主だったものはほとんど入ってしまいました。


トップ «前の日記(2004-04-15) 最新 次の日記(2004-04-17)»