template <class ForwardIterator>
char_class_type lookup_classname(ForwardIterator first,
ForwardIterator last,
bool icase = false) const;
概要
与えられた文字の範囲に対応するクラス名を取得する。
戻り値
文字の範囲[first, last)からなるクラス名文字列に対応する、未規定のクラス値を返す。
パラメータicaseがtrueである場合は、大文字・小文字を無視してクラス名の比較が行われる。
与えられたクラス名に対応する値がない場合、char_class_type()を返す。
備考
regex_traits<char>とregex_traits<wchar_t>に対しては、少なくても以下のクラス名は許可される:
| クラス名 | クラスを表すビットマスク値 | 説明 |
|---|---|---|
"alnum"/L"alnum" |
ctype_base::alnum |
英字・数字にマッチする |
"alpha"/L"alpha" |
ctype_base::alpha |
英字にマッチする |
"blank"/L"blank" |
ctype_base::blank |
ブランク文字にマッチする |
"cntrl"/L"cntrl" |
ctype_base::cntrl |
制御文字にマッチする |
"digit"/L"digit" |
ctype_base::digit |
数字にマッチする |
"d"/L"d" |
ctype_base::digit |
数字にマッチする |
"graph"/L"graph" |
ctype_base::graph |
図形文字にマッチする |
"lower"/L"lower" |
ctype_base::lower |
英小文字にマッチする |
"print"/L"print" |
ctype_base::print |
印字可能文字にマッチする |
"punct"/L"punct" |
ctype_base::punct |
区切り文字にマッチする |
"space"/L"space" |
ctype_base::space |
空白類文字にマッチする |
"s"/L"s" |
ctype_base::space |
空白類文字にマッチする |
"upper"/L"upper" |
ctype_base::upper |
英大文字にマッチする |
"w"/L"w" |
ctype_base::alnum |
英字・数字にマッチする |
"xdigit"/L"xdigit" |
ctype_base::xdigit |
十六進数字にマッチする |
例
#include <iostream>
#include <regex>
#include <string>
int main()
{
std::regex_traits<char> traits;
std::string class_name = "alnum"; // 正規表現中で[[:alnum:]]のように入力するクラス名
// 文字'a'がアルファベットと数字のクラスに含まれているかを判定する
std::regex_traits<char>::char_class_type class_value =
traits.lookup_classname(class_name.begin(), class_name.end());
if (traits.isctype('a', class_value)) {
std::cout << "'a' is alpha-numeric class" << std::endl;
}
else {
std::cout << "'a' is not alpha-numeric class" << std::endl;
}
}
出力
'a' is alpha-numeric class
バージョン
言語
- C++11
処理系
- Clang: 3.0 ✅, 3.1 ✅, 3.2 ✅, 3.3 ✅, 3.4 ✅, 3.5 ✅, 3.6 ✅
- GCC: 4.9.0 ✅, 4.9.1 ✅, 4.9.2 ✅, 5.0.0 ✅
- ICC: ??
- Visual C++: ??
参照
- LWG Issue 2018. [CD]
regex_traits::isctypeReturns clause is wrong- C++14から、戻り値の仕様文面が見直された。