| Localization library | |||||||||||||||||||||||||
| Regular expressions library(C++11) | |||||||||||||||||||||||||
| Formatting library(C++20) | |||||||||||||||||||||||||
| Null-terminated sequence utilities | |||||||||||||||||||||||||
| Byte strings | |||||||||||||||||||||||||
| Multibyte strings | |||||||||||||||||||||||||
| Wide strings | |||||||||||||||||||||||||
| Primitive numeric conversions | |||||||||||||||||||||||||
| |||||||||||||||||||||||||
| Text encoding identifications | |||||||||||||||||||||||||
| |||||||||||||||||||||||||
| Classes | ||||
(C++11) | ||||
(C++11) | ||||
(C++11) | ||||
| Algorithms | ||||
(C++11) | ||||
(C++11) | ||||
(C++11) | ||||
| Iterators | ||||
(C++11) | ||||
(C++11) | ||||
| Exceptions | ||||
(C++11) | ||||
| Traits | ||||
(C++11) | ||||
| Constants | ||||
(C++11) | ||||
(C++11) | ||||
(C++11) | ||||
| Regex Grammar | ||||
(C++11) |
| Member functions | ||||
regex_traits::value | ||||
int value( CharT ch,int radix)const; | (since C++11) | |
Determines the value represented by the digitch in the numeric baseradix, given the currently imbued locale. This function is called bystd::regex when processingQuantifiers such as{1} or{2,5},Backreferences such as\1, and hexadecimal and Unicode character escapes.
| ch | - | the character that may represent a digit |
| radix | - | either 8, 10, or 16 |
The numeric value ifch indeed represents a digit in the currently imbued locale that is valid for the numeric baseradix, or-1 on error.
#include <iostream>#include <locale>#include <map>#include <regex> // This custom regex traits allows japanese numeralsstruct jnum_traits:std::regex_traits<wchar_t>{staticstd::map<wchar_t,int> data;int value(wchar_t ch,int radix)const{wchar_t up=std::toupper(ch, getloc());return data.count(up)? data[up]: regex_traits::value(ch, radix);}};std::map<wchar_t,int> jnum_traits::data={{L'〇',0},{L'一',1},{L'二',2},{L'三',3},{L'四',4},{L'五',5},{L'六',6},{L'七',7},{L'八',8},{L'九',9},{L'A',10},{L'B',11},{L'C',12},{L'D',13},{L'E',14},{L'F',15}}; int main(){std::locale::global(std::locale("ja_JP.utf8"));std::wcout.sync_with_stdio(false);std::wcout.imbue(std::locale()); std::wstring in= L"風"; if(std::regex_match(in,std::wregex(L"\\u98a8")))std::wcout<<"\\u98a8 matched "<< in<<'\n'; if(std::regex_match(in,std::basic_regex<wchar_t, jnum_traits>(L"\\u九八a八")))std::wcout<< L"\\u九八a八 with custom traits matched "<< in<<'\n';}
Output:
\u98a8 matched 風\u九八a八 with custom traits matched 風