< cpp‎ | regex‎ | regex traits
Revision as of 22:25, 15 January 2014 by Cubbi (Talk | contribs)

template< class ForwardIt >

char_class_type lookup_classname( ForwardIt first,
                                  ForwardIt last,

                                  bool icase = false ) const;

If the character sequence [first, last) represents the name of a valid character class in the currently imbued locale (that is, the string between [: and :] in regular expressions), returns the implementation-defined value representing this character class. Otherwise, returns zero.

If the parameter icase is true, the character class ignores character case, e.g. the regex [:lower:] with std::regex_constants::icase generates a call to regex_traits<>::lookup_classname() with [first, last) indicating the string "lower" and icase == true. This call returns the same bitmask as the call generated by the regex [:alpha:] with icase == false.

The following character classes are always recognized, in both narrow and wide character forms, and the classifications returned (with icase == false) correspond to the matching classifications obtained by the std::ctype facet of the imbued locale, as follows:

character class std::ctype classification
"alnum" std::ctype_base::alnum
"alpha" std::ctype_base::alpha
"blank" std::ctype_base::blank
"cntrl" std::ctype_base::cntrl
"digit" std::ctype_base::digit
"graph" std::ctype_base::graph
"lower" std::ctype_base::lower
"print" std::ctype_base::print
"punct" std::ctype_base::punct
"space" std::ctype_base::space
"upper" std::ctype_base::upper
"xdigit" std::ctype_base::xdigit
"d" std::ctype_base::digit
"s" std::ctype_base::space
"w" std::ctype_base::alnum with '_' optionally added

The classification returned for the string "w" may be exactly the same as "alnum", in which case isctype() adds '_' explicitly.

Additional classifications such as "jdigit" or "jkanji" may be provided by system-supplied locales (in which case they are also accessible through std::wctype)



first, last - a pair of iterators which determines the sequence of characters that represents a name of a character class
icase - if true, ignores the upper/lower case distinction in the character classification
Type requirements
ForwardIt must meet the requirements of ForwardIterator.

Return value

The bitmask representing the character classification determined by the given character class, or zero if the class is unknown.


demonstraits a custom regex_traits implementation of lookup_classname/isctype

#include <iostream>
#include <locale>
#include <regex>
#include <cwctype>
// 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::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 kanji
    std::regex_search(in, m,
                      std::basic_regex<wchar_t, wctype_traits>(L"([[:jkata:]]+)"));
    std::wcout << "katakana: " << m[1] << '\n'; // prints "ナウシカ"


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

See also

indicates membership in a character class
(public member function)
looks up a character classification category in the current C locale
(function) [edit]