名前空間
変種
操作

正規表現ライブラリ

提供: cppreference.com
< cpp
ヘッダ <regex> で定義

正規表現ライブラリは正規表現を表すクラスを提供します。 正規表現は文字列のパターンマッチングを行うために使用される一種のミニ言語です。 正規表現を用いたほとんどすべての操作は以下のオブジェクトのいくつかの操作によって特徴付けられます。

  • ターゲットシーケンス。 パターンに対して検索される文字の並び。 2つのイテレータで指定された範囲、ヌル終端文字列、 std::string などが使用できます。
  • パターン。 正規表現それ自身。 何がマッチを構成するかを決定します。 std::basic_regex 型のオブジェクトであり、特別な構文の文字列から構築されます。 サポートされている構文のバリエーションの説明は syntax_option_type を参照してください。
  • マッチした配列。 マッチに関する情報は std::match_results 型のオブジェクトとして取得できます。
  • 置換文字列。 マッチを置換する方法を決定する文字列です。 サポートされている構文のバリエーションの説明は match_flag_type を参照してください。

目次

[編集] メインクラス

これらのクラスは正規表現およびターゲットシーケンスの文字内の正規表現にマッチした結果をカプセル化します。

正規表現オブジェクト
(クラステンプレート) [edit]
(C++11)
部分表現によってマッチされた文字シーケンスを識別します
(クラステンプレート) [edit]
すべての部分表現のマッチを含む1つの正規表現マッチを識別します
(クラステンプレート) [edit]

[編集] アルゴリズム

これらの関数は regex にカプセル化された正規表現をターゲットシーケンスの文字に適用するために使います。

文字シーケンス全体への正規表現のマッチを試みます
(関数テンプレート) [edit]
文字シーケンスの任意の部分への正規表現のマッチを試みます
(関数テンプレート) [edit]
正規表現の現れた部分を書式化された置換テキストに置き換えます
(関数テンプレート) [edit]

[編集] イテレータ

regex イテレータはシーケンス内で見つかる正規表現マッチのセット全体を巡回するために使われます。

文字シーケンス中のすべての正規表現マッチをイテレートします
(クラステンプレート) [edit]
指定された文字列中のすべての正規表現マッチ内の指定された部分表現またはマッチしなかった部分文字列をイテレートします
(クラステンプレート) [edit]

[編集] 例外

このクラスは正規表現ライブラリからのエラーを報告するための例外として投げられるオブジェクトの型を定義します。

正規表現ライブラリによって生成されたエラーを報告します
(クラス) [edit]

[編集] 特性

regex traits クラスは regex のローカライズ可能な側面をカプセル化します。

正規表現ライブラリによって要求される文字型に関するメタ情報を提供します
(クラステンプレート) [edit]

[編集] 定数

名前空間 std::regex_constants で定義
正規表現の動作を制御する一般的なオプション
(typedef) [edit]
マッチングに固有のオプション
(typedef) [edit]
様々な種類のマッチングエラーを表します
(typedef) [edit]

[編集]

#include <iostream>
#include <iterator>
#include <string>
#include <regex>
 
int main()
{
    std::string s = "Some people, when confronted with a problem, think "
        "\"I know, I'll use regular expressions.\" "
        "Now they have two problems.";
 
    std::regex self_regex("REGULAR EXPRESSIONS",
            std::regex_constants::ECMAScript | std::regex_constants::icase);
    if (std::regex_search(s, self_regex)) {
        std::cout << "Text contains the phrase 'regular expressions'\n";
    }
 
    std::regex word_regex("(\\S+)");
    auto words_begin = 
        std::sregex_iterator(s.begin(), s.end(), word_regex);
    auto words_end = std::sregex_iterator();
 
    std::cout << "Found "
              << std::distance(words_begin, words_end)
              << " words\n";
 
    const int N = 6;
    std::cout << "Words longer than " << N << " characters:\n";
    for (std::sregex_iterator i = words_begin; i != words_end; ++i) {
        std::smatch match = *i;
        std::string match_str = match.str();
        if (match_str.size() > N) {
            std::cout << "  " << match_str << '\n';
        }
    }
 
    std::regex long_word_regex("(\\w{7,})");
    std::string new_s = std::regex_replace(s, long_word_regex, "[$&]");
    std::cout << new_s << '\n';
}

出力:

Text contains the phrase 'regular expressions'
Found 19 words
Words longer than 6 characters:
  people,
  confronted
  problem,
  regular
  expressions."
  problems.
Some people, when [confronted] with a [problem], think 
"I know, I'll use [regular] [expressions]." Now they have two [problems].