Spec-Zone.ru › C++

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API