std::regex_traits<CharT>::transform_primary
template< class ForwardIt > string_type transform_primary( ForwardIt first, ForwardIt last ) const; |
||
获得字符序列 [
first,
last)
在浸染的本地环境中的校排顺序中的主排序键,即基于国家字母表中,忽略大小写、发音符号、变体等的字母位置和校排单元的排序键。若主排序键以 operator< 比较小于另一排序键,则产生第一个排序键的字符序列,在当前浸染的本地环境的主校排顺序中,先于生成第二个排序键的字符序列。
正则表达式库用此特征将字符匹配到等价类。例如,若 traits.transform_primary(c1) 等价于 traits.transform_primary("a"),则正则表达式 [[=a=]] 等价于字符 c1
,(这在美国英语本地环境中对 "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) 。
|
返回值
字符序列 [
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 的示例 |