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
が、シーケンス末尾の反復子の場合、最初の演算子は、格納された値 pos
を subs.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 つ目のコンストラクターは、格納されている反復子 it
が regex_iterator<BidIt, Elem, RXtraits>(first, last, re, f)
に初期化され、格納されているベクター subs
が値 submatch
を含む正確に 1 つの整数を保持し、格納されている値 pos
が 0 のオブジェクトを構築します。 メモ: 生成されたオブジェクトは、正規表現が一致するたびに、インデックス値 submatch
によって識別されるサブマッチを抽出します。
3 つ目のコンストラクターは、格納されている反復子 it
が regex_iterator<BidIt, Elem, RXtraits>(first, last, re, f)
に初期化され、格納されているベクター subs
がコンストラクター引数 submatches
のコピーを保持し、格納されている値 pos
が 0 のオブジェクトを構築します。
4 つ目のコンストラクターは、格納されている反復子 it
が regex_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