Namensräume
Varianten
Aktionen

std::regex_traits<CharT>::transform_primary

Von cppreference.com
< cpp‎ | regex‎ | regex traits
 
 
 
Bibliothek für reguläre Ausdrücke
Klassen
(C++11)
Algorithmen
Iteratoren
Ausnahmen
Traits
Konstanten
(C++11)
Reguläre Ausdrucksgrammatiken
 
 
template< class ForwardIt >
string_type transform_primary( ForwardIt first, ForwardIt last ) const;

Für die Zeichensequenz [firstlast) wird der primäre Sortierschlüssel in der eingeprägten Kollationsreihenfolge des Locales ermittelt, d. h. der Sortierschlüssel, der auf den Positionen der Buchstaben und Kollationseinheiten im nationalen Alphabet basiert und Groß-/Kleinschreibung, Diakritika, Varianten usw. ignoriert. Wenn ein primärer Sortierschlüssel mit operator< kleiner als ein anderer primärer Sortierschlüssel verglichen wird, dann kommt die Zeichensequenz, die den ersten Sortierschlüssel erzeugt hat, in der primären Kollationsreihenfolge des aktuell eingeprägten Locales vor der Zeichensequenz, die den zweiten Sortierschlüssel erzeugt hat.

Die Regex-Bibliothek verwendet diesen Trait, um Zeichen mit Äquivalenzklassen abzugleichen. Zum Beispiel ist der Regex [[=a=]] äquivalent zu dem Zeichen c1, wenn traits.transform_primary(c1) äquivalent zu traits.transform_primary("a") ist (was für jedes c1 aus "AÀÁÂÃÄÅaàáâãäå" im US-englischen Locale wahr ist). Beachten Sie, dass transform_primary() ein Zeichenfolgenargument entgegennimmt, da Äquivalenzklassen mehrere Zeichen umfassen können, wie z. B. [[=ch=]] im Tschechischen oder [[=dzs=]] im Ungarischen.

Es gibt keine portable Möglichkeit, den primären Sortierschlüssel mithilfe von std::locale zu definieren, da die Konvertierung vom Kollationsschlüssel, der von std::collate::transform() zurückgegeben wird, in den primären Äquivalenzschlüssel localespezifisch ist und wenn der Benutzer die Facette std::collate ersetzt, diese Konvertierung der Standardbibliotheksfacette std::regex_traits nicht mehr bekannt ist. Standardbibliotheks-Spezialisierungen von std::regex_traits geben eine leere Zeichenfolge zurück, es sei denn, die Facette std::collate des aktuell eingeprägten Locales wurde nicht vom Benutzer ersetzt und entspricht immer noch der systemseitig bereitgestellten Facette std::collate), in welchem Fall std::collate_byname<CharT>::transform(first, last) ausgeführt wird und der von ihm erzeugte Sortierschlüssel unter Verwendung einer localespezifischen Konvertierung in den erwarteten primären Sortierschlüssel konvertiert wird.

[edit] Parameter

first, last - ein Paar von Iteratoren, die die zu vergleichende Zeichensequenz bestimmen
Typanforderungen
-
ForwardIt muss die Anforderungen von LegacyForwardIterator erfüllen.

[edit] Rückgabewert

Der primäre Sortierschlüssel für die Zeichensequenz [firstlast) im aktuell eingeprägten Locale, wobei Groß-/Kleinschreibung, Varianten, Diakritika usw. ignoriert werden.

[edit] Beispiel

Demonstriert die Regex-Funktion, die über transform_primary() funktioniert.

#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';
}

Mögliche Ausgabe

true