std::regex_traits<CharT>::lookup_classname
| template< class ForwardIt > char_class_type lookup_classname( ForwardIt first, |
||
現在のロケールに設定されている文字クラス名(正規表現における [: と :] の間の文字列)を表す文字シーケンス [first, last) が有効な場合、この文字クラスを表す実装定義値を返します。それ以外の場合はゼロを返します。
パラメータ icase が true の場合、文字クラスは文字の大文字・小文字を区別しません。例えば、std::regex_constants::icase を持つ正規表現 [:lower:] は、文字列 "lower" を示し icase == true となる lookup_classname() の呼び出しを生成します。この呼び出しは、icase == false の正規表現 [:alpha:] によって生成される呼び出しと同じビットマスクを返します。
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() のカスタム regex traits 実装を示します。
#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ロケールで文字分類カテゴリを検索する (関数) |