std::regex_traits<CharT>::lookup_classname (3) - Linux Manuals

std::regex_traits<CharT>::lookup_classname: std::regex_traits<CharT>::lookup_classname


std::regex_traits<CharT>::lookup_classname - std::regex_traits<CharT>::lookup_classname


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 LegacyForwardIterator.

Return value

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


demonstraits a custom regex_traits implementation of lookup_classname/isctype
// Run this code

  #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 katakana
      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
isctype (public member function)
        looks up a character classification category in the current C locale
wctype (function)