Namespaces
Variants

std::regex_traits<CharT>:: transform_primary

From ja.cppreference.net
Regular expressions library
Classes
(C++11)
Algorithms
Iterators
Exceptions
Traits
Constants
(C++11)
Regex Grammar
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