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
|
Этот раздел не завершён
Причина: можно добавить пример с пользовательским regex_traits, предоставляющим пользовательский transform_primary |