C++ Builder 5でPCREを試してみました。    ■ POSIX風  -------------------------------------------------------  regex_tとregmatch_tという二つの構造体のエリアをプログラム側で用意しなければいけません。流れとしては、regcomp → regexec → regfree です。    a(b.c)d の( )の数がregcompでregex_tの中のnsubに返ってきます。0番目のregmatch_tの中にマッチした全体のstart/endの位置が入り、$1が1番目という感じです。何故かその後ろに-1/-1のペアが入ってくるので、多めにregmatch_tを用意していないとダメみたいです。    ■ オリジナルのPCRE  -------------------------------------------------------  流れとしては、pcre_compile → pcre_info → pcre_exec → pcre_free という感じです。POSIX風の時とインターフェースが変わり、今度は pcre という構造体のエリアは pcre_compile が作ってくれます。( )で括った部分を受けるエリアは自分で用意しないといけないのは同様ですが、それはただのintの配列です。POSIX風の時のnsubにあたるものは pcre_info で取得しますが、(その数+1)*3 ぐらい用意しておけ、ということがHelpに書いてあります。本体が作業域でお使いになるそうです。    また、POSIX風の時のとは違って pcre_version でバージョン情報を取得できます。すると「2.01 21-Oct-1998」です。何だか古そう・・・ということで、    ■ 今のバージョンのPCRE  -------------------------------------------------------  netで捜すと今のバージョンは3.8までいっています。そこで、それをダウンロードしてみました。    GNUWin用のbinのアーカイブからpcre.dllを、libのアーカイブからpcre.hとlibpcre-bcc.libを解凍します。bccという名前通りBorland用のimport libが用意されています。    とりあえず、pcre_info を pcre_fullinfo に変え、pcre_execの引数の変更にあわせてソースを修正し、プロジェクトにlibpcre-bcc.libを追加すると、ちゃんとコンパイルができました。カレントにpcre.dllを置いて実行してみると、バージョンの表示は「3.8 18-Dec-2001」となりました。その他の動きの2.01との違いはよくわかりません。    ちなみに  2.01の時のテストプログラムのexeのサイズ:384k   3.8の時のテストプログラムのexeのサイズ:366k   3.8のpcre.dllのサイズ; 47.4k  でした。    【今日の日経平均】 10,208 -233
|
|