std::regex_traits<CharT>::transform_primary
template< class ForwardIt > string_type transform_primary( ForwardIt first, ForwardIt last ) const; |
Для последовательности символов [first, last), получает первичный ключ сортировки в порядке сортировки используемого распознавания, то есть ключ сортировки, основанный на позициях букв и единиц сортировки в национальном алфавите, игнорируя регистр, диакритические знаки, варианты и т. д. Если первичный ключ сортировки сравнивается меньше, чем другой первичный ключ сортировки с operator<, то последовательность символов, которая породила первый ключ сортировки, предшествует последовательности символов, которая породила второй ключ сортировки, в текущем порядке первичной сортировки используемого распознавания.
Библиотека регулярных выражений использует этот признак для сопоставления символов с классами эквивалентности. Например, регулярное выражение [[=a=]] эквивалентно символу c1 если traits.transform_primary(c1) эквивалентно traits.transform_primary("a") (что верно для любого c1 из "AÀÁÂÃÄÅaàáâãäå" в распознавании США). Обратите внимание, что 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
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/regex/regex_traits/transform_primary