命名空间
变体
操作

std::regex_traits<CharT>::transform_primary

来自 cppreference.com
< cpp‎ | regex‎ | regex traits
template< class ForwardIt >
string_type transform_primary( ForwardIt first, ForwardIt last ) const;

对于字符序列 [firstlast),获取在注入的区域设置的排序顺序中的主要排序键,即基于字母和排序单元在国家字母表中的位置的排序键,忽略大小写、变体、重音符号等。如果主要排序键与另一个主要排序键使用 operator< 比较时结果较小,则生成第一个排序键的字符序列在当前注入的区域设置的主要排序顺序中位于生成第二个排序键的字符序列之前。

正则表达式库使用此特征将字符与等效类进行匹配。例如,正则表达式 [[=a=]] 等效于字符 c1,如果 traits.transform_primary(c1) 等效于 traits.transform_primary("a")(在美国英语区域设置中,对于 "AÀÁÂÃÄÅaàáâãäå" 中的任何 c1 都是如此)。请注意,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 的要求。

[编辑] 返回值

当前注入的区域设置中,字符序列 [firstlast) 的主要排序键,忽略大小写、变体、重音符号等。

[编辑] 示例

演示通过 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