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/cpp/regex/regex_traits/transform_primary

Spec-Zone.ru

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