std::regex_traits<CharT>:: transform_primary
|
template
<
class
ForwardIt
>
string_type transform_primary ( ForwardIt first, ForwardIt last ) const ; |
||
文字シーケンス
[
first
,
last
)
に対して、現在設定されたロケールの照合順序におけるプライマリソートキー(つまり、大文字小文字、発音区別符号、バリアントなどを無視し、国家アルファベットにおける文字と照合単位の位置に基づくソートキー)を取得します。あるプライマリソートキーが別のプライマリソートキーより
operator
<
で小さいと比較された場合、最初のソートキーを生成した文字シーケンスは、現在設定されたロケールのプライマリ照合順序において、2番目のソートキーを生成した文字シーケンスよりも前に来ます。
正規表現ライブラリはこの特性を使用して、文字を等価クラスに対して照合します。例えば、正規表現
[
[
=
a
=
]
]
は、文字
c1
が
traits.
transform_primary
(
c1
)
と
traits.
transform_primary
(
"a"
)
が等価である場合(米国英語ロケールでは
"AÀÁÂÃÄÅaàáâãäå"
からの任意の
c1
に対して真)、文字
c1
と等価です。
transform_primary()
が文字シーケンス引数を取ることに注意してください。これは、等価クラスがチェコ語の
[
[
=
ch
=
]
]
やハンガリー語の
[
[
=
dzs
=
]
]
のように複数文字の場合があるためです。
一次ソートキーをstd::localeの観点で定義する移植性のある方法は存在しません。これは、std::collate::transform()が返す照合キーから一次等価キーへの変換はロケール固有であり、ユーザーがstd::collateファセットを置換した場合、その変換は標準ライブラリのstd::regex_traitsにとって既知ではなくなるためです。std::regex_traitsの標準ライブラリ特殊化は、現在適用されているロケールのstd::collateファセットがユーザーによって置換されておらず、かつシステム提供のstd::collateファセットと一致する場合(その場合std::collate_byname<CharT>::transform(first, last)が実行され、それが生成するソートキーがロケール固有の変換を用いて期待される一次ソートキーに変換されます)、空の文字列を返します。
パラメータ
| first, last | - | 比較対象の文字シーケンスを決定するイテレータのペア |
| 型要件 | ||
-
ForwardIt
は
LegacyForwardIterator
の要件を満たさなければならない。
|
||
戻り値
文字シーケンス
[
first
,
last
)
に対する主ソートキーを、現在設定されたロケールで、大文字小文字、バリアント、ダイアクリティカルマークなどを無視して算出します。
例
transform_primary() を介して動作する正規表現機能を実演します。
#include <iostream> #include <regex> int main() { std::locale::global(std::locale("en_US.UTF-8")); std::wstring str = L"AÀÁÂÃÄÅaàáâãäå"; std::wregex re(L"[[=a=]]*", std::regex::basic); std::cout << std::boolalpha << std::regex_match(str, re) << '\n'; }
出力例:
true
|
このセクションは不完全です
理由: ユーザー定義のregex_traitsがユーザー定義のtransform_primaryを提供する例を追加すると良い |