Unicode と Boost.Regex
Boost.Regex で Unicode 文字列を使う方法は 2 つある。
wchar_t への依存
プラットフォームの wchar_t
型が Unicode 文字列を保持でき、かつプラットフォームの C/C++ 実行時ライブラリがワイド文字定数(が std::iswspace
や std::iswlower
に渡されるなどのケース)を正しく処理できるのであれば、boost::wregex
を使った Unicode 処理が可能である。しかしながら、このアプローチにはいくつか不便がある。
移植性がない。
wchar_t
の幅や実行時ライブラリがワイド文字を Unicode として扱うかどうかについては何の保証もない。ほとんどの Windows コンパイラは保証しているが、多くの Unix システムではそうではない。Unicode 固有の文字クラスはサポートされない(
[[:Nd:]]
、[[:Po:]]
など)。ワイド文字シーケンスで符号化された文字列しか検索できない。UTF-8 や UTF-16 でさえも多くのプラットフォームで検索できない。
Unicode 対応の正規表現型の使用
ICU ライブラリがあれば Unicode 固有の文字プロパティや、UTF-8 、UTF-16 、および UTF-32 で符号化された文字列の検索をサポートする特別な正規表現型(boost::u32regex
)を提供する。ICU 文字列クラスのサポートを見よ。