次の方法で共有


regex_token_iterator クラス

サブマッチ用の反復子クラス。

構文

template<class BidIt,
   class Elem = typename std::iterator_traits<BidIt>::value_type,
   class RxTraits = regex_traits<Elem> >
class regex_token_iterator

パラメーター

BidIt
サブマッチ用の反復子の型。

Elem
一致させる要素の型。

RXtraits
要素の特徴 (traits) クラス。

解説

このクラス テンプレートは、定数前方反復子オブジェクトを表します。 概念的には、文字シーケンスで正規表現と一致するものを検索するために使用される regex_iterator オブジェクトを保持します。 また、正規表現の一致ごとに、格納されているベクター sub_match<BidIt> 内のインデックス値で識別されるサブマッチを表す subs 型のオブジェクトを抽出します。

-1 のインデックス値は、前回の正規表現の一致の直後から始まる文字シーケンスまたは前回の正規表現の一致が存在しなかった場合の文字シーケンスの先頭から始まって現在の正規表現の一致の最初の文字の直前まで続く、または、現在の一致が存在しない場合の文字シーケンスの最後まで続く文字シーケンスを指定します。 その他のインデックス値 idx は、 it.match[idx]に保持されているキャプチャ グループの内容を指定します。

メンバー

メンバー Default Value
private regex_iterator<BidIt, Elem, RXtraits> it
private vector<int> subs
private int pos

コンストラクター

コンストラクター 説明
regex_token_iterator 反復子を構築します。

Typedefs

型名 説明
difference_type 反復子の型の相違点。
iterator_category 反復子カテゴリの型。
pointer 一致へのポインターの型です。
参照先 サブマッチへの参照の型です。
regex_type 一致させる正規表現の型。
value_type サブマッチの型。

演算子

演算子 説明
operator!= 反復子の非等値を比較します。
operator* 指定されたサブマッチにアクセスします。
operator++ 反復子をインクリメントします。
operator== 反復子が等しいかどうかを比較します。
operator-> 指定されたサブマッチにアクセスします。

要件

ヘッダー: <regex>

名前空間: std

#include <regex>
#include <iostream>

typedef std::regex_token_iterator<const char *> Myiter;
int main()
    {
    const char *pat = "aaxaayaaz";
    Myiter::regex_type rx("(a)a");
    Myiter next(pat, pat + strlen(pat), rx);
    Myiter end;

// show whole match
    for (; next != end; ++next)
        std::cout << "match == " << next->str() << std::endl;
    std::cout << std::endl;

// show prefix before match
    next = Myiter(pat, pat + strlen(pat), rx, -1);
    for (; next != end; ++next)
        std::cout << "match == " << next->str() << std::endl;
    std::cout << std::endl;

// show (a) submatch only
    next = Myiter(pat, pat + strlen(pat), rx, 1);
    for (; next != end; ++next)
        std::cout << "match == " << next->str() << std::endl;
    std::cout << std::endl;

// show prefixes and submatches
    std::vector<int> vec;
    vec.push_back(-1);
    vec.push_back(1);
    next = Myiter(pat, pat + strlen(pat), rx, vec);
    for (; next != end; ++next)
        std::cout << "match == " << next->str() << std::endl;
    std::cout << std::endl;

// show prefixes and whole matches
    int arr[] = {-1, 0};
    next = Myiter(pat, pat + strlen(pat), rx, arr);
    for (; next != end; ++next)
        std::cout << "match == " << next->str() << std::endl;
    std::cout << std::endl;

// other members
    Myiter it1(pat, pat + strlen(pat), rx);
    Myiter it2(it1);
    next = it1;

    Myiter::iterator_category cat = std::forward_iterator_tag();
    Myiter::difference_type dif = -3;
    Myiter::value_type mr = *it1;
    Myiter::reference ref = mr;
    Myiter::pointer ptr = &ref;

    dif = dif; // to quiet "unused" warnings
    ptr = ptr;

    return (0);
    }
match == aa
match == aa
match == aa

match ==
match == x
match == y
match == z

match == a
match == a
match == a

match ==
match == a
match == x
match == a
match == y
match == a
match == z

match ==
match == aa
match == x
match == aa
match == y
match == aa
match == z

regex_token_iterator::d ifference_type

反復子の型の相違点。

typedef std::ptrdiff_t difference_type;

解説

型は、std::ptrdiff_t の同意語。

regex_token_iterator::iterator_category

反復子カテゴリの型。

typedef std::forward_iterator_tag iterator_category;

解説

型は、std::forward_iterator_tag の同意語。

regex_token_iterator::operator!=

反復子の非等値を比較します。

bool operator!=(const regex_token_iterator& right);

パラメーター

right
比較する反復子。

解説

このメンバー関数は、!(*this == right) を返します。

regex_token_iterator::operator*

指定されたサブマッチにアクセスします。

const sub_match<BidIt>& operator*();

解説

このメンバー関数は、インデックス値 sub_match<BidIt> で識別されるキャプチャ グループを表す subs[pos] オブジェクトを返します。

regex_token_iterator::operator++

反復子をインクリメントします。

regex_token_iterator& operator++();

regex_token_iterator& operator++(int);

解説

格納された反復子 it が、シーケンス末尾の反復子の場合、最初の演算子は、格納された値 possubs.size() の値に設定します (シーケンス末尾の反復子にするため)。 それ以外の場合、格納された値 pos をインクリメントします。結果が値 subs.size() に等しい場合は、格納された値 pos をゼロに設定し、格納された反復子 it をインクリメントします。 格納された反復子をインクリメントしてもシーケンス末尾の反復子と等しくならない場合、演算子はそれ以上何もしません。 それ以外の場合で、前の一致の末尾が文字シーケンスの末尾にある場合は、pos の格納された値を subs.size() に設定します。 それ以外の場合は、格納された値 pos を、pos == subs.size() または subs[pos] == -1 になるまで繰り返しインクリメントします (インデックス値のいずれかが -1 の場合、反復子の次の逆参照で文字シーケンスの末尾が返されるようにします)。 すべての場合に、演算子はオブジェクトを返します。

2 つ目の演算子は、オブジェクトのコピーを作成して、オブジェクトをインクリメントしてから、そのコピーを返します。

regex_token_iterator::operator==

反復子が等しいかどうかを比較します。

bool operator==(const regex_token_iterator& right);

パラメーター

right
比較する反復子。

解説

このメンバー関数は、it == right.it && subs == right.subs && pos == right.pos を返します。

regex_token_iterator::operator->

指定されたサブマッチにアクセスします。

const sub_match<BidIt> * operator->();

解説

このメンバー関数は、インデックス値 sub_match<BidIt> で識別されるキャプチャ グループを表す subs[pos] オブジェクトのポインタを返します。

regex_token_iterator::p ointer

一致へのポインターの型です。

typedef sub_match<BidIt> *pointer;

解説

この型は sub_match<BidIt>*のシノニムです。ここで BidIt はテンプレート パラメーターです。

regex_token_iterator::reference

サブマッチへの参照の型です。

typedef sub_match<BidIt>& reference;

解説

この型は sub_match<BidIt>&のシノニムです。ここで BidIt はテンプレート パラメーターです。

regex_token_iterator::regex_token_iterator

反復子を構築します。

regex_token_iterator();

regex_token_iterator(BidIt first, BidIt last,
    const regex_type& re, int submatch = 0,
    regex_constants::match_flag_type f = regex_constants::match_default);

regex_token_iterator(BidIt first, BidIt last,
    const regex_type& re, const vector<int> submatches,
    regex_constants::match_flag_type f = regex_constants::match_default);

template <std::size_t N>
regex_token_iterator(BidIt first, BidIt last,
    const regex_type& re, const int (&submatches)[N],
    regex_constants::match_flag_type f = regex_constants::match_default);

パラメーター

first
一致させるシーケンスの先頭。

last
一致させるシーケンスの末尾。

re
照合する正規表現。

f
一致のフラグ。

解説

1 つ目のコンストラクターは、シーケンス末尾の反復子を構築します。

2 つ目のコンストラクターは、格納されている反復子 itregex_iterator<BidIt, Elem, RXtraits>(first, last, re, f)に初期化され、格納されているベクター subs が値 submatchを含む正確に 1 つの整数を保持し、格納されている値 pos が 0 のオブジェクトを構築します。 メモ: 生成されたオブジェクトは、正規表現が一致するたびに、インデックス値 submatch によって識別されるサブマッチを抽出します。

3 つ目のコンストラクターは、格納されている反復子 itregex_iterator<BidIt, Elem, RXtraits>(first, last, re, f)に初期化され、格納されているベクター subs がコンストラクター引数 submatchesのコピーを保持し、格納されている値 pos が 0 のオブジェクトを構築します。

4 つ目のコンストラクターは、格納されている反復子 itregex_iterator<BidIt, Elem, RXtraits>(first, last, re, f)に初期化され、格納されているベクター subs がコンストラクター引数 N によって示される submatchesの値を保持し、格納されている値 pos が 0 のオブジェクトを構築します。

regex_token_iterator::regex_type

一致させる正規表現の型。

typedef basic_regex<Elem, RXtraits> regex_type;

解説

typedef は、 basic_regex<Elem, RXtraits>のシノニムです。

regex_token_iterator::value_type

サブマッチの型。

typedef sub_match<BidIt> value_type;

解説

この型は sub_match<BidIt>のシノニムです。ここで BidIt はテンプレート パラメーターです。

関連項目

<regex>
regex_constants クラス
regex_error クラス
<regex> 関数
regex_iterator クラス
<regex> 演算子
regex_traits クラス
<regex> typedefs