Namespaces
Variants

std::basic_regex<CharT,Traits>:: basic_regex

From cppreference.net
Regular expressions library
Classes
(C++11)
Algorithms
Iterators
Exceptions
Traits
Constants
(C++11)
Regex Grammar
basic_regex ( ) ;
(1) (C++11以降)
explicit basic_regex ( const CharT * s,
flag_type f = std:: regex_constants :: ECMAScript ) ;
(2) (C++11以降)
basic_regex ( const CharT * s, std:: size_t count,
flag_type f = std:: regex_constants :: ECMAScript ) ;
(3) (C++11以降)
basic_regex ( const basic_regex & other ) ;
(4) (C++11以降)
basic_regex ( basic_regex && other ) noexcept ;
(5) (C++11以降)
template < class ST, class SA >

explicit basic_regex ( const std:: basic_string < CharT,ST,SA > & str,

flag_type f = std:: regex_constants :: ECMAScript ) ;
(6) (C++11以降)
template < class ForwardIt >

basic_regex ( ForwardIt first, ForwardIt last,

flag_type f = std:: regex_constants :: ECMAScript ) ;
(7) (C++11以降)
basic_regex ( std:: initializer_list < CharT > init,
flag_type f = std:: regex_constants :: ECMAScript ) ;
(8) (C++11以降)

文字シーケンスから新しい正規表現を構築します。このシーケンスはフラグ f に従って解釈されます。

1) デフォルトコンストラクタ。何もマッチしない空の正規表現を構築します。
2) ヌル終端文字列 s から正規表現を構築します。
3) count 文字のシーケンスから正規表現を構築します。シーケンスは s が指す文字列です。
4) コピーコンストラクタ。 other をコピーしてregexを構築します。
5) ムーブコンストラクタ。ムーブセマンティクスを使用して other の内容でregexを構築します。
6) 文字列から正規表現を構築する str
7) 範囲コンストラクタ。範囲の内容で文字列を構築する [ first , last )
8) 初期化リストコンストラクタ。初期化リスト init の内容で文字列を構築します。

パラメータ

s - ヌル終端文字列へのポインタ
count - 正規表現の初期化に使用される文字シーケンスの長さ
first, last - 正規表現の初期化に使用される文字シーケンスの範囲
str - 正規表現の初期化に使用されるソースとしてのbasic_string
other - 正規表現の初期化に使用するソースとしての別の正規表現
init - 正規表現の初期化に使用される初期化子リスト
f - 文字シーケンスを正規表現として解釈する際のガイドとなるフラグ
型要件
-
ForwardIt LegacyForwardIterator の要件を満たさなければならない。

例外

1) 実装定義の例外をスローする可能性があります。
2,3) std::regex_error 提供された正規表現が有効でない場合。
4) 実装定義の例外をスローする可能性があります。
6-8) std::regex_error 提供された正規表現が有効でない場合。

#include <iomanip>
#include <iostream>
#include <regex>
#include <string>
void match_and_print(const std::string& text, const std::regex& pattern)
{
    std::sregex_iterator it(text.begin(), text.end(), pattern), it_end;
    int count = 0;
    for (; it != it_end; ++it)
    {
        const std::smatch& match = *it;
        std::cout << ++count << ". " << std::quoted(match.str()) << '\n';
    }
    std::cout << (count ? "\n" : "no match found\n\n");
}
int main()
{
    const std::string text = "Hello, World! 12345";
    // 1つ以上の数字にマッチ
    std::string pattern_text = "\\d+";
    std::cout << "数字 (" << pattern_text << "):\n";
    auto pattern = std::regex(pattern_text);
    match_and_print(text, pattern);
    // スペースで区切られた1つ以上の文字にマッチ
    pattern_text = "[^\\s]+";
    std::cout << "単語 (" << pattern_text << "):\n";
    pattern = std::regex(pattern_text);
    match_and_print(text, pattern);
    // スペースで区切られた1つ以上の文字にマッチ
    pattern_text = "[a-zA-Z]+";
    std::cout << "記号と数字を含まない単語 (" << pattern_text << "):\n";
    pattern = std::regex(pattern_text);
    match_and_print(text, pattern);
    // 数字でもアルファベットでもない1文字にマッチ
    pattern_text = "[^0-9A-Za-z]";
    std::cout << "記号 (" << pattern_text << "):\n";
    pattern = std::regex(pattern_text);
    match_and_print(text, pattern);
    // 1つ以上の小文字にマッチ
    pattern_text = "[a-z]+";
    std::cout << "小文字 (" << pattern_text << "):\n";
    pattern = std::regex(pattern_text);
    match_and_print(text, pattern);
    // std::regex::icaseフラグを使用した1つ以上の小文字にマッチ
    pattern_text = "[a-z]+";
    std::cout << "大文字小文字を無視するフラグ付きの小文字 (" << pattern_text << "):\n";
    pattern = std::regex(pattern_text, std::regex::icase);
    match_and_print(text, pattern);
    // 基本的なPOSIX正規表現にマッチ
    pattern_text = "[[:digit:]]+";
    std::cout << "基本的なPOSIX正規表現 (" << pattern_text << "):\n";
    pattern = std::regex(pattern_text, std::regex::basic);
    match_and_print(text, pattern);
    // 拡張POSIX正規表現にマッチ
    pattern_text = "[[:digit:]]+";
    std::cout << "拡張POSIX正規表現 (" << pattern_text << "):\n";
    pattern = std::regex(pattern_text, std::regex::extended);
    match_and_print(text, pattern);
}

出力:

digits (\d+):
1. "12345"
words ([^\s]+):
1. "Hello,"
2. "World!"
3. "12345"
words without symbols and digits ([a-zA-Z]+):
1. "Hello"
2. "World"
symbol ([^0-9A-Za-z]):
1. ","
2. " "
3. "!"
4. " "
lowercase ([a-z]+):
1. "ello"
2. "orld"
lowercase with ignore case flag ([a-z]+):
1. "Hello"
2. "World"
basic POSIX regex ([[:digit:]]+):
一致するものは見つかりませんでした
extended POSIX regex ([[:digit:]]+):
1. "12345"