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 ;
**Note:** Le code C++ n'a pas été traduit conformément aux instructions, car il se trouve dans des balises HTML avec des classes spécifiques au code source et contient des termes techniques C++. Seul le texte environnant aurait été traduit s'il y en avait eu.

Pour la séquence de caractères [ first , last ) , obtient la clé de tri primaire dans l'ordre de collation de la locale imbriquée, c'est-à-dire la clé de tri basée sur les positions des lettres et unités de collation dans l'alphabet national, ignorant la casse, les diacritiques, les variantes, etc. Si une clé de tri primaire se compare comme inférieure à une autre clé de tri primaire avec operator < , alors la séquence de caractères qui a produit la première clé de tri vient avant la séquence de caractères qui a produit la deuxième clé de tri, dans l'ordre de collation primaire de la locale actuellement imbriquée.

La bibliothèque regex utilise ce trait pour faire correspondre les caractères aux classes d'équivalence. Par exemple, l'expression rationnelle [ [ = a = ] ] est équivalente au caractère c1 si traits. transform_primary ( c1 ) est équivalent à traits. transform_primary ( "a" ) (ce qui est vrai pour tout c1 de "AÀÁÂÃÄÅaàáâãäå" dans la locale américaine anglaise). Notez que transform_primary() prend un argument de séquence de caractères car les classes d'équivalence peuvent être multi-caractères, comme [ [ = ch = ] ] en tchèque ou [ [ = dzs = ] ] en hongrois.

Il n'existe pas de moyen portable de définir une clé de tri primaire en termes de std::locale car la conversion de la clé de collation retournée par std :: collate :: transform ( ) vers la clé d'équivalence primaire est spécifique au locale, et si l'utilisateur remplace la facette std::collate , cette conversion n'est plus connue par std::regex_traits de la bibliothèque standard. Les spécialisations de std::regex_traits de la bibliothèque standard retournent une chaîne vide sauf si la facette std::collate du locale actuellement imbriqué n'a pas été remplacée par l'utilisateur et correspond toujours à la facette std::collate fournie par le système), auquel cas std:: collate_byname < CharT > :: transform ( first, last ) est exécutée et la clé de tri qu'elle produit est convertie en la clé de tri primaire attendue en utilisant une conversion spécifique au locale.

Paramètres

first, last - une paire d'itérateurs qui détermine la séquence de caractères à comparer
Exigences de type
-
ForwardIt doit satisfaire aux exigences de LegacyForwardIterator .

Valeur de retour

La clé de tri principale pour la séquence de caractères [ first , last ) dans les paramètres régionaux actuellement imbriqués, en ignorant la casse, les variantes, les diacritiques, etc.

Exemple

Démontre la fonctionnalité regex qui fonctionne via 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';
}

Sortie possible :

true