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 ;

Für die Zeichensequenz [ first , last ) wird der primäre Sortierschlüssel in der Sortierreihenfolge der eingestellten Locale ermittelt, das heißt der Sortierschlüssel, der auf den Positionen der Buchstaben und Sortiereinheiten im nationalen Alphabet basiert, wobei Groß-/Kleinschreibung, Diakritika, Varianten etc. ignoriert werden. Wenn ein primärer Sortierschlüssel mit operator < als kleiner verglichen wird als ein anderer primärer Sortierschlüssel, dann kommt die Zeichensequenz, die den ersten Sortierschlüssel erzeugt hat, vor der Zeichensequenz, die den zweiten Sortierschlüssel erzeugt hat, in der primären Sortierreihenfolge der aktuell eingestellten Locale.

Die Regex-Bibliothek verwendet dieses Merkmal, um Zeichen mit Äquivalenzklassen abzugleichen. Zum Beispiel ist der Regex [ [ = a = ] ] äquivalent zum 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 zutrifft). Beachten Sie, dass transform_primary() ein Zeichensequenzargument erwartet, weil Äquivalenzklassen mehrzeilig sein können, wie [ [ = ch = ] ] im Tschechischen oder [ [ = dzs = ] ] im Ungarischen.

Es gibt keine portable Möglichkeit, den primären Sortierschlüssel in Bezug auf std::locale zu definieren, da die Konvertierung vom durch std :: collate :: transform ( ) zurückgegebenen Kollationsschlüssel zum primären Äquivalenzschlüssel lokalspezifisch ist. Wenn der Benutzer die std::collate Facette ersetzt, ist diese Konvertierung der Standardbibliothek- std::regex_traits nicht mehr bekannt. Standardbibliothek-Spezialisierungen von std::regex_traits geben eine leere Zeichenkette zurück, es sei denn, die std::collate Facette des aktuell eingestellten Locale wurde nicht vom Benutzer ersetzt und stimmt weiterhin mit der systemseitig bereitgestellten std::collate Facette überein. In diesem Fall wird std:: collate_byname < CharT > :: transform ( first, last ) ausgeführt und der erzeugte Sortierschlüssel wird mithilfe einer lokalspezifischen Konvertierung in den erwarteten primären Sortierschlüssel umgewandelt.

Parameter

first, last - ein Iteratorpaar, das die zu vergleichende Zeichensequenz bestimmt
Typanforderungen
-
ForwardIt muss die Anforderungen von LegacyForwardIterator erfüllen.

Rückgabewert

Der primäre Sortierschlüssel für die Zeichenfolge [ first , last ) in der aktuell eingestellten Locale, unter Ignorierung von Groß-/Kleinschreibung, Varianten, Diakritika usw.

Beispiel

Demonstriert die Regex-Funktionalität, die durch transform_primary() arbeitet.

#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