std::regex_traits<CharT>::transform_primary
template< class ForwardIt > string_type transform_primary( ForwardIt first, ForwardIt last ) const; |
||
对于字符序列 [
first,
last)
,获取在当前语境(imbued locale)排序规则中的主要排序键,即基于字母和整理单元在国家字母表中的位置,忽略大小写、变音符号、变体等。如果一个主要排序键与另一个主要排序键通过 operator< 比较为小于,则生成第一个排序键的字符序列在当前语境的主要排序顺序中位于生成第二个排序键的字符序列之前。
正则表达式库使用此特性来将字符与等价类匹配。例如,如果 traits.transform_primary(c1) 等价于 traits.transform_primary("a"),则正则表达式 [[=a=]] 等价于字符 c1
(这对于美国英语语境中的任何 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 的示例 |