Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
正規表現ライブラリ
by kanegon
1. 概要
VBScript 5.0 (IE5.0) からサポートされた正規表現オブジェクトは ActiveX のコン
ポーネントになっているため、他の言語からも利用可能な仕組みになっている。
その正規表現コンポーネントを C++ から利用するためのライブラリのソースである。
当ライブラリは実行時バインディング(late binding)を使用して実装しているため、性
能的には若干の問題があるかもしれない。
クラス化はしていないが early binding の実装サンプルを early_bind フォルダを置
いておくので、気になる人は自分で書き換えて使用のこと。
ただし、ベースとするコンポーネント自身が ActiveX オブジェクトであるため、
Shift_JIS <=> Unicode 変換のオーバヘッドがどうしても避けられず、あまり細かく性
能を意識しても意味はないとも考えている。
Shift_JIS <=> Unicode が行われることによる暗黙のコード変換の問題もあるため、
これら性能や文字コード問題にこだわる場合にはこのライブラリは使用せず、別のライ
ブラリを探したほうがよい。
もちろん、これらの性能や文字コード問題は通常の使用方法であればほとんど問題にな
るものではなく、実際アプリケーションに組み込んでも十分に有用なものと考えている。
2. 対応コンパイラ
VC++ 6.0
VS.NET 2003
Borland C++ 5.5.1 [free版]
...たぶん
3. 正規表現オブジェクトについて
正規表現オブジェクト (VBScript.RegExp) は VBScript 5.0 からサポートされ、5.5
で一部拡張された。VBScript 5.0 は IE5.0 に 5.5 は IE5.5 に含まれるため、すくな
くとも IE5.0 がインストールされていれば、正規表現オブジェクトを使用できる(ハズ)。
VBScript 5.0 の正規表現オブジェクトが RegExp、5.5 のものが RegExp2 に対応する。
RegExp2 では一部関数が追加されているが、それ以外にも構文(パターンの特殊文字)
や後方参照、置換文字列としてのドル記号変数の扱いなども変更されているようであり、
若干の注意が必要。もちろん、最初から 5.5 しか使用しないのであればまず問題はな
い。
詳細は MSDN を参照のこと。
このライブラリでは 5.5 のみに対応している。
4. ライブラリについて
VC++ の #import ディレクティブを使用すればあえて自分でクラス化しなくても、その
まま使用できる。
# #import 自体が ActiveX のラッパクラス生成の機能であるため当然といえる
このクラス化は主に free 版の Borland C++ コンパイラで正規表現を利用するために
作成した。
内容の詳細についてはソースを参照のこと。
VC の場合、ソースをビルドするには VC のパスを設定してから、コマンドラインで
> nmake
と入力する。
Borland C++ の場合には Borland C++ のパスを設定してから、コマンドラインで
> make /f makefile.bcc
と入力する。
現状では作成してみただけ版のため、不具合を多分に含んでいる可能性がある。
実用目的では使う場合は要注意のこと。
5. todo
- Invoke 時にエラーの詳細情報を取得する
- GetMatchItem() 等の範囲外アクセスの場合に例外を返すか、それとも常に NULL、0、
空文字列等を返してエラーを発生させない方がよいか、要検討
現状ではすべて例外を発生させている(はず)。
6. 使用条件
ご自由にどうぞ。
本プログラムおよびソースコードは無保証です。
本プログラムおよびソースコードの使用において生じた如何なる損害についても作者
は一切の責任を負いません。
7. 修正履歴
2004.02.08 以前作成した、#import 版が Borland C++ で使用できないので、Invoke版
を新規に書き下ろし。
2004.02.09 いくつかの bug 修正
2004.02.13 エラー処理の整理
8. 連絡先
金子尚史(kanegon)
e-mail: wbs01621@mail.wbs.ne.jp