Cocoa 正規表現ライブラリといえば、国産、かつ(たぶん)世界で最も利用されている OgreKit があるので、他には目が行きにくいかもしれませんが、恐らく最後発と思われる、「 RegexKit 」というフレームワークが出てきています。
国内・海外問わず、多くのアプリに採用されている、OgreKit の貫禄には負けますが、RegexKit の気合いも、なかなかのものです。まだご存じない方は、一度チェックしてみてください:
- ライセンス — BSD
- 正規表現エンジン — PCRE
- 特徴
- 64bit 対応
- GC 対応
- スレッドセーフ
- キャッシュ、低レベル API などを駆使して高速、低負荷に
- RSS フィードで更新される、Xcode 3 対応の完全なドキュメント(これが OgreKit への大きなアドバンテージかもしれない)
- Instruments.app 用の Instruments
この RegexKit の子分(?)として、さらに最近リリースされたのが、RegexKitLite です。
RegexKitLite は、RegexKit の機能をやや縮小したもの…ではなくて、上記の気合いは引き継ぎつつも、まったくの別物になっています:
- ライセンス — BSD
- 正規表現エンジン — ICU
- 特徴
- MacOS X にもともと内蔵されている ICU ライブラリを利用、かつ、RegexKit がフレームワーク形式であるのに対して、Lite で用意されているのは、基礎的な
NSString
のカテゴリーのみであるため、激しくサイズが小さい 。 - もちろん詳しいドキュメント付き。
- MacOS X にもともと内蔵されている ICU ライブラリを利用、かつ、RegexKit がフレームワーク形式であるのに対して、Lite で用意されているのは、基礎的な
つまり、レゴブロックの小さな基本セットのようなもの です。
事実、「文字列中の 最初の マッチを返す」といったメソッドしか用意されていないので、ドキュメントには、それを使ってすべてのマッチを返す NSEnumerator
のサブクラスを作る、という チュートリアル が入っています。
…というわけで、OgreKit や RegexKit といったフルフィーチャーのフレームワークと比べて、実戦で使うには、ある程度自分の手を動かす必要があるのですが、それは逆に、不必要なコードを自分のアプリにいっさい含めなくてよい、ということなので、Kaku のように「圧縮すれば、まだフロッピーにも入るよ!」が売り(Mac ユーザーにとっては何年も前から意味のないアピールポイント…笑)のアプリを開発している方にはうってつけ、と言えるでしょう。
RegexkitLite をプロジェクトに追加する
ほとんど ドキュメント に 書いてある ことと同じですが、僕が詰まったところを少し、補足してあります。
ICU ライブラリをプロジェクトに追加します。
「Frameworks」グループ を選択して右クリック、「追加」>「既存のファイル…」 から ICU ライブラリを選択して、追加します。
ICU ライブラリは、Leopard 以降向けのアプリなら:
/Developer/SDKs/MacOSX10.5.sdk/usr/lib/libicucore.dylib
を、それ以外はプロジェクトの設定に従って、適切なバージョンを追加します。
追加の際現れるシートでは、「デスティネーショングループのフォルダに項目をコピーする(必要な場合)」のチェックを外しておく よう、注意してください。
※ ここでさらに注意。追加した libicucore.dylib は、ファイルタイプ「
compiled.mach-o
」と認識されますが、これだとビルド時にエラーになるので、情報パネルを開いて、「compiled.mach-o.dylib
」に修正 しておいてください。ICU ライブラリをターゲットに追加します。
先ほど追加した libicucore.dylib を、任意のターゲットの「バイナリをライブラリにリンク」ビルドフェーズにドラッグ&ドロップして追加 します。
※ また、「バンドルリソースをコピー」ビルドフェーズには勝手に追加されている ので、これを 削除 します。
あとは、RegexKitLite のパッケージに入っている、
RegexKitLite.h/m
をプロジェクトに追加します。こちらは「デスティネーショングループのフォルダに項目をコピーする(必要な場合)」 を有効にして、コピーしましょう。
ドキュメントを Xcode に登録します。
Xcode のドキュメントウィンドウ左下のアクションボタンから、「新規サブスクリプション…」 を選んで、フィード URL:
feed://regexkit.sourceforge.net/RegexKitLiteDocSets.atom
を追加すると、Apple のリファレンスなどと同じように使うことができます。とても便利!
…というわけで、あとはいつものように import "RegexKitLite.h"
して使います。
余談
なぜ突然正規表現ライブラリの話が出てきたかと言うと、ひょんなことから Kaku にもそこそこの構文カラーリングをつけたいなあ… と思ったから。
ライブラリが良くても、僕がひどい使い方をして遅くしてしまうかもしれないので、実現可能性は不透明ですが、まあなんとか頑張ってみます。