std::regex_traits::value - cppreference.com

##### cppreference.com

##### Search

Create account

##### Namespaces

- Page
- Discussion

##### Variants

##### Views

- View
- Edit
- History

##### Actions

# std::regex_traits::value

From cppreference.com
< cpp‎ | regex‎ | regex traits

int value( CharT ch, int radix ) const; |  | (since C++11)

Determines the value represented by the digit `ch` in the numeric base `radix`, given the currently imbued locale. This function is called by std::regex when processing Quantifiers such as `{1`} or `{2,5`}, Backreferences such as `\1`, and hexadecimal and Unicode character escapes.

### [edit] Parameters

ch | - | the character that may represent a digit
radix | - | either 8, 10, or 16

### [edit] Return value

The numeric value if `ch` indeed represents a digit in the currently imbued locale that is valid for the numeric base `radix`, or -1 on error.

### [edit] Example

Run this code

    #include <iostream>
    #include <locale>
    #include <regex>
    #include <map>

    // This custom regex traits allows japanese numerals
    struct jnum_traits : std::regex_traits<wchar_t>
    {
        static std::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'Ａ',10}, {L'Ｂ',11},
                                                {L'Ｃ',12}, {L'Ｄ',13}, {L'Ｅ',14},
                                                {L'Ｆ',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九八ａ八")))
            std::wcout << L"\\u九八ａ八 with custom traits matched " << in << '\n';
    }

Output:

    \u98a8 matched 風
    \u九八ａ八 with custom traits matched 風

Retrieved from "http://en.cppreference.com/mwiki/index.php?title=cpp/regex/regex_traits/value&oldid=67016"