構成

コンパイラセットアップ

Boost.Config サブシステムがあるため、Boost.Regex を使うのに特別な構成は必要ない。問題がある場合(あるいは一般的でないコンパイラやプラットフォームを使う場合)は Boost.Config に構成スクリプトがあるので、そちらを使うとよい。

ロカールおよび特性クラスの選択

ユーザのロカール(locale)を Boost.Regex がどのように処理するか制御するには、以下のマクロ(user.hpp を見よ)を使う。

BOOST_REGEX_USE_C_LOCALE

Boost.Regex が、特性クラス中で大域 C ロカールを使うように強制する。C++ ロカールがあるのでこの設定は現在非推奨となっている。

BOOST_REGEX_USE_CPP_LOCALE

Boost.Regex が、既定特性クラス中で std::locale を使うように強制する。各正規表現はインスタンス固有のロカールにより imbue される。これは Windows 以外のプラットフォームにおける既定の動作である。

BOOST_REGEX_NO_W32

Boost.Regex は(利用可能な場合でも)あらゆる Win32 API を使用しない(BOOST_REGEX_USE_C_LOCALE が設定されない限り BOOST_REGEX_USE_CPP_LOCALE が暗黙に有効になる)。

リンケージに関するオプション

Microsoft C++ および Borland C++ ビルドでは Boost.Regex の DLL ビルドにリンクするようになる。既定では Boost.Regex は、動的 C 実行時ライブラリを使用している場合であっても静的ライブラリにリンクする。

BOOST_REGEX_NO_LIB

Microsoft C++ および Borland C++ において、Boost.Regex がリンクするライブラリを自動的に選択しないようにする。

BOOST_REGEX_NO_FASTCALL

Microsoft ビルドにおいて、__fastcall 呼び出し規約よりも __cdecl 呼び出し規約を使用する。マネージ・アンマネージコードの両方から同じライブラリを使用する場合に有用。

アルゴリズムの選択

BOOST_REGEX_RECURSIVE

スタック再帰マッチアルゴリズムを使用する。これは通常最速のオプションである(といっても効果はわずかだが)が、極端な場合はスタックオーバーフローを起こす可能性がある(Win32 では安全に処理されるが、その他のプラットフォームではそうではない)。

BOOST_REGEX_NON_RECURSIVE

非スタック再帰マッチアルゴリズムを使用する。スタック再帰に比べて若干遅いが、どれだけ病的な正規表現に対しても安全である。これは Win32 以外のプラットフォームにおける既定である。

アルゴリズムの調整

以下のオプションは BOOST_REGEX_RECURSIVE が設定されている場合のみ有効である。

BOOST_REGEX_HAS_MS_STACK_GUARD

Microsoft スタイルの __try - __except ブロックがサポートされており、スタックオーバーフローを安全に捕捉できることを Boost.Regex に通知する。

以下のオプションは BOOST_REGEX_NON_RECURSIVE が設定されている場合のみ有効である。

BOOST_REGEX_BLOCKSIZE

非再帰モードにおいて Boost.Regex は状態マシンのスタックのために大きめのメモリブロックを使う。ブロックのサイズが大きいほどメモリ確保の回数は少なくなる。既定は 4096 バイトであり、大抵の正規表現マッチでメモリの再確保が必要ない値である。しかしながらプラットフォームの特性を見た上で、別の値を選択することも可能である。

BOOST_REGEX_MAX_BLOCKS

サイズ BOOST_REGEX_BLOCKSIZE のブロックをいくつ使用できるか設定する。この値を超えると Boost.Regex はマッチの検索を停止し、std::runtime_error を投げる。既定値は 1024 である。BOOST_REGEX_BLOCKSIZE を変更した場合、この値にも微調整が必要である。

BOOST_REGEX_MAX_CACHE_BLOCKS

内部キャッシュに格納するメモリブロック数を設定する。メモリブロックは ::operator new 呼び出しではなくこのキャッシュから割り当てられる。一般的にこの方法はメモリブロック要求のたびに ::operator new を呼び出すよりも数段高速だが、巨大なメモリチャンク(サイズが BOOST_REGEX_BLOCKSIZE のブロックが最大 16 個)をキャッシュしなければならないという欠点がある。メモリの制限が厳しい場合は、この値を 0 に設定し(キャッシュはまったく行われない)、それで遅すぎる場合は 1 か 2 にするとよい。逆に巨大なマルチプロセッサ、マルチスレッドのシステムでは大きな値のほうがよい。