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 ;

Если последовательность символов [ first , last ) представляет имя допустимого класса символов в текущей установленной локали (то есть строку между [: и :] в регулярных выражениях), возвращает определенное реализацией значение, представляющее этот класс символов. В противном случае возвращает ноль.

Если параметр icase равен true , символьный класс игнорирует регистр символов, например, регулярное выражение [:lower:] с std::regex_constants::icase генерирует вызов std:: regex_traits <> :: lookup_classname ( ) с [ first , last ) , указывающим на строку "lower" и icase == true . Этот вызов возвращает ту же битовую маску, что и вызов, сгенерированный регулярным выражением [:alpha:] с icase == false .

Следующие названия классов узких и широких символов всегда распознаются std:: regex_traits < char > и std:: regex_traits < wchar_t > соответственно, а возвращаемые классификации (при icase == false ) соответствуют совпадающим классификациям, полученным с помощью фасета std::ctype установленной локали, следующим образом:

Название класса символов std::ctype классификация
Узкие Широкие
"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
с опциональным добавлением '_'

Классификация, возвращаемая для строки "w" может быть точно такой же, как "alnum" , в этом случае isctype() явно добавляет '_' .

Дополнительные классификации, такие как "jdigit" или "jkanji" могут предоставляться системными локалями (в этом случае они также доступны через std::wctype ).

Содержание

Параметры

first, last - пара итераторов, определяющая последовательность символов, представляющую имя класса символов
icase - если true , игнорирует различие регистра в классификации символов
Требования к типам
-
ForwardIt должен удовлетворять требованиям LegacyForwardIterator .

Возвращаемое значение

Битовая маска, представляющая классификацию символов, определённую данным классом символов, или char_class_type ( ) если класс неизвестен.

Пример

Демонстрирует пользовательскую реализацию характеристик регулярных выражений для 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 "ナウシカ"
}

Вывод:

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

Смотрите также

указывает принадлежность к классу символов
(public member function)
ищет категорию классификации символов в текущей локали C
(function)