std::regex_traits<CharT>:: transform_primary
|
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
|
Dieser Abschnitt ist unvollständig
Grund: könnte ein Beispiel mit benutzerdefinierten regex_traits verwenden, die benutzerdefinierte transform_primary bereitstellen |