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") (这在美国英语本地环境中对来自 "AÀÁÂÃÄÅaàáâãäå" 的任何 c1
为真)。注意 transform_primary()
接收字符序列参数,因为等价类可能是多字符,如捷克语中的 [[=ch=]] 或匈牙利语中的 [[=dzs=]] 。
没有以 std::locale 定义初等排序关键的可移植方式,因为从 std::collate::transform() 所返回的对照关键到初等等价关键的转换是本地环境限定的,而且若用户替换 std::collate 平面,则转换就不再是标准库的 std::regex_traits 。 std::regex_traits 的标准库特化返回空字符串,除非当前感染的本 locale 的 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
本节未完成 原因:可使用带提供用户定义 transform_primary 的用户定义 regex_traits 的示例 |