Namespaces
Variants

std::regex_traits<CharT>:: transform_primary

From 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