Unicode と Boost.Regex

Boost.Regex で Unicode 文字列を使う方法は 2 つある。

wchar_t への依存

プラットフォームの wchar_t 型が Unicode 文字列を保持でき、かつプラットフォームの C/C++ 実行時ライブラリがワイド文字定数(が std::iswspacestd::iswlower に渡されるなどのケース)を正しく処理できるのであれば、boost::wregex を使った Unicode 処理が可能である。しかしながら、このアプローチにはいくつか不便がある。

  • 移植性がない。wchar_t の幅や実行時ライブラリがワイド文字を Unicode として扱うかどうかについては何の保証もない。ほとんどの Windows コンパイラは保証しているが、多くの Unix システムではそうではない。

  • Unicode 固有の文字クラスはサポートされない([[:Nd:]][[:Po:]] など)。

  • ワイド文字シーケンスで符号化された文字列しか検索できない。UTF-8 や UTF-16 でさえも多くのプラットフォームで検索できない。

Unicode 対応の正規表現型の使用

ICU ライブラリがあれば Boost.Regex から利用できるように設定できる。これにより Unicode 固有の文字プロパティや、UTF-8 、UTF-16 、および UTF-32 で符号化された文字列の検索をサポートする特別な正規表現型(boost::u32regex)が提供される。ICU 文字列クラスのサポートを見よ。