最終更新日時: 2026年01月08日 20時16分38秒 (JST)
yoh が更新

履歴 編集

class template
<regex>

# std::basic_regex(C++11)

    namespace std {
      template <class charT,
                class traits = regex_traits<charT> >
      class basic_regex;

      using regex  = basic_regex<char>;
      using wregex = basic_regex<wchar_t>;
    }

## 概要

`basic_regex`クラステンプレートは、`charT`型の文字列から構築する正規表現を表す。 `charT`は、`char`型、`wchar_t`型のような文字型である。 `traits`は正規表現の文字・変換に関する特性である。 利便性のために、`charT`を`char`特殊化した`regex`と、`charT`を`wchar_t`特殊化した`wregex`が用意されている。

`basic_regex`オブジェクトの内部表現や、正規表現アルゴリズムが`basic_regex`オブジェクトの内部表現にどのようにアクセスするかは規定されない。 ユーザーはそれらを意識することなく、`basic_regex`オブジェクトを正規表現アルゴリズムに渡すだけでよい。

このクラス中で発生したエラーは、正規表現アルゴリズムが`regex_error`型の例外を送出することで通知される。

## メンバ関数

### 構築

名前 | 説明 | 対応バージョン
--- | --- | ---
`(constructor)` | コンストラクタ | C++11
`(destructor)` | デストラクタ | C++11

### 代入

名前 | 説明 | 対応バージョン
--- | --- | ---
`operator=` | 正規表現を代入する | C++11
`assign` | 正規表現を代入する | C++11

### 定数操作

名前 | 説明 | 対応バージョン
--- | --- | ---
`mark_count` | 正規表現内のキャプチャグループの数を返す | C++11
`flags` | 最後に設定された正規表現フラグを返す | C++11

### ロケール

名前 | 説明 | 対応バージョン
--- | --- | ---
`imbue` | ロケールを設定する | C++11
`getloc` | 現在のロケールを得る | C++11

### 交換

名前 | 説明 | 対応バージョン
--- | --- | ---
`swap` | 正規表現オブジェクトを交換する | C++11

## メンバ定数

静的メンバ定数は利便性のために`std::regex_constants`で定義される定数の同義語として提供される。

名前 | 説明 | 対応バージョン
--- | --- | ---
`icase` | `static constexpr regex_constants::syntax_option_type icase = regex_constants::icase;` | C++11
`nosubs` | `static constexpr regex_constants::syntax_option_type nosubs = regex_constants::nosubs;` | C++11
`optimize` | `static constexpr regex_constants::syntax_option_type optimize = regex_constants::optimize;` | C++11
`collate` | `static constexpr regex_constants::syntax_option_type collate = regex_constants::collate;` | C++11
`ECMAScript` | `static constexpr regex_constants::syntax_option_type ECMAScript = regex_constants::ECMAScript;` | C++11
`basic` | `static constexpr regex_constants::syntax_option_type basic = regex_constants::basic;` | C++11
`extended` | `static constexpr regex_constants::syntax_option_type extended = regex_constants::extended;` | C++11
`awk` | `static constexpr regex_constants::syntax_option_type awk = regex_constants::awk;` | C++11
`grep` | `static constexpr regex_constants::syntax_option_type grep = regex_constants::grep;` | C++11
`egrep` | `static constexpr regex_constants::syntax_option_type egrep = regex_constants::egrep;` | C++11

## メンバ型

名前 | 説明 | 対応バージョン
--- | --- | ---
`value_type` | `charT` | C++11
`traits_type` | `traits` | C++11
`string_type` | `traits::string_type` | C++11
`flag_type` | `regex_constants::syntax_option_type` | C++11
`locale_type` | `traits::locale_type` | C++11

## 非メンバ関数

### 交換

名前 | 説明 | 対応バージョン
--- | --- | ---
`swap` | 二つの正規表現オブジェクトを交換する | C++11

## 推論補助

名前 | 説明 | 対応バージョン
--- | --- | ---
`(deduction_guide)` | クラステンプレートの推論補助 | C++17

## 例

    #include <iostream>
    #include <regex>
    #include <string>

    int main()
    {
      std::string input = "12345";

      // 全てが数字か判定するための正規表現
      std::regex re(R"(^\d+$)");

      if (std::regex_match(input, re)) {
        std::cout << "全て数字です" << std::endl;
      }
      else {
        std::cout << "数字以外が含まれています" << std::endl;
      }
    }

### 出力

    全て数字です

## バージョン

### 言語

- 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++: ??