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 ;

Para la secuencia de caracteres [ first , last ) , obtiene la clave de ordenación primaria en el orden de intercalación de la configuración regional actual, es decir, la clave de ordenación que se basa en las posiciones de las letras y unidades de intercalación en el alfabeto nacional, ignorando mayúsculas/minúsculas, diacríticos, variantes, etc. Si una clave de ordenación primaria se compara como menor que otra clave de ordenación primaria con operator < , entonces la secuencia de caracteres que produjo la primera clave de ordenación viene antes que la secuencia de caracteres que produjo la segunda clave de ordenación, en el orden de intercalación primario de la configuración regional actual.

La biblioteca de expresiones regulares utiliza este rasgo para comparar caracteres con clases de equivalencia. Por ejemplo, la expresión regular [ [ = a = ] ] es equivalente al carácter c1 si traits. transform_primary ( c1 ) es equivalente a traits. transform_primary ( "a" ) (lo cual es verdadero para cualquier c1 de "AÀÁÂÃÄÅaàáâãäå" en la configuración regional de inglés estadounidense). Nótese que transform_primary() toma un argumento de secuencia de caracteres porque las clases de equivalencia pueden ser multicarácter, como [ [ = ch = ] ] en checo o [ [ = dzs = ] ] en húngaro.

No existe una forma portátil de definir la clave de ordenación primaria en términos de std::locale ya que la conversión desde la clave de intercalación devuelta por std :: collate :: transform ( ) hacia la clave de equivalencia primaria es específica de la configuración regional, y si el usuario reemplaza la faceta std::collate , dicha conversión ya no es conocida por std::regex_traits de la biblioteca estándar. Las especializaciones de biblioteca estándar de std::regex_traits devuelven una cadena vacía a menos que la faceta std::collate de la configuración regional actualmente imbucida no haya sido reemplazada por el usuario, y aún coincida con la faceta std::collate proporcionada por el sistema), en cuyo caso se ejecuta std:: collate_byname < CharT > :: transform ( first, last ) y la clave de ordenación que produce se convierte a la clave de ordenación primaria esperada usando una conversión específica de la configuración regional.

Parámetros

first, last - un par de iteradores que determina la secuencia de caracteres a comparar
Requisitos de tipo
-
ForwardIt debe cumplir con los requisitos de LegacyForwardIterator .

Valor de retorno

La clave de ordenación principal para la secuencia de caracteres [ first , last ) en la configuración regional actualmente imbucida, ignorando mayúsculas/minúsculas, variantes, diacríticos, etc.

Ejemplo

Demuestra la característica de expresiones regulares que funciona a través de 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';
}

Salida posible:

true