Namespaces
Variants

std::regex_traits<CharT>:: lookup_classname

From cppreference.net
Regular expressions library
Classes
(C++11)
Algorithms
Iterators
Exceptions
Traits
Constants
(C++11)
Regex Grammar
template < class ForwardIt >

char_class_type lookup_classname ( ForwardIt first,
ForwardIt last,

bool icase = false ) const ;

Si la séquence de caractères [ first , last ) représente le nom d'une classe de caractères valide dans les paramètres régionaux actuellement imbriqués (c'est-à-dire la chaîne entre [: et :] dans les expressions régulières), retourne la valeur définie par l'implémentation représentant cette classe de caractères. Sinon, retourne zéro.

Si le paramètre icase est true , la classe de caractères ignore la casse, par exemple l'expression rationnelle [:lower:] avec std::regex_constants::icase génère un appel à std:: regex_traits <> :: lookup_classname ( ) avec [ first , last ) indiquant la chaîne "lower" et icase == true . Cet appel retourne le même masque binaire que l'appel généré par l'expression rationnelle [:alpha:] avec icase == false .

Les noms de classes de caractères étroits et larges suivants sont toujours reconnus par std:: regex_traits < char > et std:: regex_traits < wchar_t > respectivement, et les classifications retournées (avec icase == false ) correspondent aux classifications de correspondance obtenues par le facet std::ctype de la locale imbriquée, comme suit :

Nom de la classe de caractères std::ctype Classification
Étroit Large
"alnum" L "alnum" std::ctype_base::alnum
"alpha" L "alpha" std::ctype_base::alpha
"blank" L "blank" std::ctype_base::blank
"cntrl" L "cntrl" std::ctype_base::cntrl
"digit" L "digit" std::ctype_base::digit
"graph" L "graph" std::ctype_base::graph
"lower" L "lower" std::ctype_base::lower
"print" L "print" std::ctype_base::print
"punct" L "punct" std::ctype_base::punct
"space" L "space" std::ctype_base::space
"upper" L "upper" std::ctype_base::upper
"xdigit" L "xdigit" std::ctype_base::xdigit
"d" L "d" std::ctype_base::digit
"s" L "s" std::ctype_base::space
"w" L "w" std::ctype_base::alnum
avec '_' optionnellement ajouté

La classification retournée pour la chaîne "w" peut être exactement la même que "alnum" , auquel cas isctype() ajoute explicitement '_' .

Des classifications supplémentaires telles que "jdigit" ou "jkanji" peuvent être fournies par les locales fournies par le système (auquel cas elles sont également accessibles via std::wctype ).

Table des matières

Paramètres

first, last - une paire d'itérateurs qui détermine la séquence de caractères représentant un nom de classe de caractères
icase - si true , ignore la distinction majuscule/minuscule dans la classification des caractères
Exigences de type
-
ForwardIt doit satisfaire aux exigences de LegacyForwardIterator .

Valeur de retour

Le masque de bits représentant la classification des caractères déterminée par la classe de caractères donnée, ou char_class_type ( ) si la classe est inconnue.

Exemple

Démontre une implémentation personnalisée de traits regex de lookup_classname() / isctype() :

#include <cwctype>
#include <iostream>
#include <locale>
#include <regex>
// This custom regex traits uses wctype/iswctype to implement lookup_classname/isctype.
struct wctype_traits : std::regex_traits<wchar_t>
{
    using char_class_type = std::wctype_t;
    template<class It>
    char_class_type lookup_classname(It first, It last, bool = false) const
    {
        return std::wctype(std::string(first, last).c_str());
    }
    bool isctype(wchar_t c, char_class_type f) const
    {
        return std::iswctype(c, f);
    }
};
int main()
{
    std::locale::global(std::locale("ja_JP.utf8"));
    std::wcout.sync_with_stdio(false);
    std::wcout.imbue(std::locale());
    std::wsmatch m;
    std::wstring in = L"風の谷のナウシカ";
    // matches all characters (they are classified as alnum)
    std::regex_search(in, m, std::wregex(L"([[:alnum:]]+)"));
    std::wcout << "alnums: " << m[1] << '\n'; // prints "風の谷のナウシカ"
    // matches only the katakana
    std::regex_search(in, m,
                      std::basic_regex<wchar_t, wctype_traits>(L"([[:jkata:]]+)"));
    std::wcout << "katakana: " << m[1] << '\n'; // prints "ナウシカ"
}

Sortie :

alnums: 風の谷のナウシカ
katakana: ナウシカ

Voir aussi

indique l'appartenance à une classe de caractères
(fonction membre publique)
recherche une catégorie de classification de caractères dans les paramètres régionaux C actuels
(fonction)