命名空间
变体
操作

std::regex_traits<CharT>::transform_primary

来自 cppreference.cn
< cpp‎ | regex‎ | regex traits
 
 
 
正则表达式库
(C++11)
算法
迭代器
异常
特性
常量
(C++11)
正则表达式语法
 
 
template< class ForwardIt >
string_type transform_primary( ForwardIt first, ForwardIt last ) const;

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

正则表达式库使用此特性来匹配字符与等价类。例如,如果 traits.transform_primary(c1) 等价于 traits.transform_primary("a") (对于美国英语区域设置中 "AÀÁÂÃÄÅaàáâãäå" 中的任何 c1 均成立),则正则表达式 [[=a=]] 等价于字符 c1。请注意,transform_primary() 接受字符序列参数,因为等价类可能是多字符的,例如捷克语中的 [[=ch=]] 或匈牙利语中的 [[=dzs=]]

由于从 std::collate::transform() 返回的排序键到主等价键的转换是特定于区域设置的,并且如果用户替换了 std::collate facet,则标准库的 std::regex_traits 不再知道该转换,因此没有可移植的方式使用 std::locale 定义主排序键。除非当前浸染区域设置的 std::collate facet 未被用户替换,并且仍然与系统提供的 std::collate facet 匹配,否则 std::regex_traits 的标准库特化会返回空字符串),在这种情况下,将执行 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