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 ;

Wenn die Zeichenfolge [ first , last ) den Namen einer gültigen Zeichenklasse in der aktuell eingestellten Locale darstellt (das heißt, die Zeichenkette zwischen [: und :] in regulären Ausdrücken), gibt den implementierungsdefinierten Wert zurück, der diese Zeichenklasse repräsentiert. Andernfalls wird Null zurückgegeben.

Wenn der Parameter icase auf true gesetzt ist, ignoriert die Zeichenklasse die Groß-/Kleinschreibung, z.B. erzeugt der Regex [:lower:] mit std::regex_constants::icase einen Aufruf von std:: regex_traits <> :: lookup_classname ( ) mit [ first , last ) , die den String "lower" anzeigt, und icase == true . Dieser Aufruf liefert die gleiche Bitmaske zurück wie der Aufruf, der durch den Regex [:alpha:] mit icase == false erzeugt wird.

Die folgenden schmalen und breiten Zeichenklassennamen werden stets erkannt von std:: regex_traits < char > und std:: regex_traits < wchar_t > entsprechend, und die zurückgegebenen Klassifizierungen (mit icase == false ) entsprechen den übereinstimmenden Klassifizierungen, die durch die std::ctype Facette des eingebundenen Locale erhalten werden, wie folgt:

Zeichenklassenname std::ctype Klassifizierung
Schmal Breit
"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
mit optional hinzugefügtem '_'

Die für die Zeichenkette zurückgegebene Klassifizierung "w" kann exakt dieselbe sein wie "alnum" , in welchem Fall isctype() explizit '_' hinzufügt.

Zusätzliche Klassifikationen wie "jdigit" oder "jkanji" können von systemseitig bereitgestellten Locales bereitgestellt werden (in diesem Fall sind sie auch über std::wctype zugänglich).

Inhaltsverzeichnis

Parameter

first, last - ein Iteratorpaar, das die Zeichenfolge bestimmt, die einen Namen einer Zeichenklasse darstellt
icase - falls true , ignoriert die Groß-/Kleinschreibung in der Zeichenklassifizierung
Typanforderungen
-
ForwardIt muss die Anforderungen von LegacyForwardIterator erfüllen.

Rückgabewert

Die Bitmaske, die die Zeichenklassifizierung darstellt, bestimmt durch die gegebene Zeichenklasse, oder char_class_type ( ) falls die Klasse unbekannt ist.

Beispiel

Demonstriert eine benutzerdefinierte Regex-Traits-Implementierung von 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 "ナウシカ"
}

Ausgabe:

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

Siehe auch

zeigt die Zugehörigkeit zu einer Zeichenklasse an
(öffentliche Mitgliedsfunktion)
sucht eine Zeichenklassifizierungskategorie in der aktuellen C-Lokalisierung
(Funktion)