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 ;

Для последовательности символов [ 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