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を提供する例を追加すると良い |