Namespaces
Variants

std::regex_traits<CharT>:: transform_primary

From cppreference.net
Regular expressions library
Classes
(C++11)
Algorithms
Iterators
Exceptions
Traits
Constants
(C++11)
Regex Grammar
template < class ForwardIt >
string_type transform_primary ( ForwardIt first, ForwardIt last ) const ;

문자 시퀀스 [ first , last ) 에 대해, 현재 임뷰드(imbued) 로캘의 문자열 정렬 순서에서 기본 정렬 키를 획득합니다. 이는 대소문자, 발음 구별 기호, 변형 등을 무시하고 국가별 알파벳에서 문자의 위치와 문자열 정렬 단위를 기반으로 하는 정렬 키입니다. 만약 하나의 기본 정렬 키가 다른 기본 정렬 키보다 operator < 로 비교하여 작다면, 첫 번째 정렬 키를 생성한 문자 시퀀스는 현재 임뷰드 로캘의 기본 문자열 정렬 순서에서 두 번째 정렬 키를 생성한 문자 시퀀스보다 앞에 옵니다.

정규식 라이브러리는 동등 클래스에 대해 문자를 매칭하기 위해 이 특성(trait)을 사용합니다. 예를 들어, 정규식 [ [ = a = ] ] 는 문자 c1 과 동등합니다. 만약 traits. transform_primary ( c1 ) traits. transform_primary ( "a" ) 와 동등할 경우 (이는 미국 영어 로캘에서 c1 "AÀÁÂÃÄÅaàáâãäå" 에 속하는 모든 문자에 대해 참입니다). transform_primary() 가 문자 시퀀스 인자를 취한다는 점에 유의하십시오. 왜냐하면 동등 클래스는 체코어의 [ [ = ch = ] ] 또는 헝가리어의 [ [ = dzs = ] ] 와 같이 다중 문자(multicharacter)일 수 있기 때문입니다.

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 ) 에 대한 1차 정렬 키로, 현재 임뷰드된 로캘에서 대소문자, 변형, 발음 구별 기호 등을 무시합니다.

예제

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