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 的示例 |