regex_token_iterator 構造体テンプレート

template<typename BidiIter>
struct regex_token_iterator

概要

// ヘッダ:<boost/xpressive/regex_token_iterator.hpp>

template<typename BidiIter>
struct regex_token_iterator {
  // 型
  typedef basic_regex< BidiIter >          regex_type;
  typedef iterator_value< BidiIter >::type char_type;
  typedef sub_match< BidiIter >            value_type;
  typedef std::ptrdiff_t                   difference_type;
  typedef value_type const *               pointer;
  typedef value_type const &               reference;
  typedef std::forward_iterator_tag        iterator_category;

  // 構築、コピー、解体
  regex_token_iterator();
  regex_token_iterator(BidiIter, BidiIter, basic_regex< BidiIter > const &);
  template<typename LetExpr>
    regex_token_iterator(BidiIter, BidiIter, basic_regex< BidiIter > const &,
                         unspecified);
  template<typename Subs>
    regex_token_iterator(BidiIter, BidiIter, basic_regex< BidiIter > const &,
                         Subs const &,
                         regex_constants::match_flag_type = regex_constants::match_default);
  template<typename Subs, typename LetExpr>
    regex_token_iterator(BidiIter, BidiIter, basic_regex< BidiIter > const &,
                         Subs const &, unspecified,
                         regex_constants::match_flag_type = regex_constants::match_default);
  regex_token_iterator(regex_token_iterator< BidiIter > const &);
  regex_token_iterator< BidiIter >& operator=(regex_token_iterator< BidiIter > const &);

  // 公開メンバ関数
  value_type const & operator*() const;
  value_type const * operator->() const;
  regex_token_iterator BidiIter > & operator++();
  regex_token_iterator BidiIter > operator++(int);
};

説明

regex_token_iterator 構築、コピー、解体の公開演算

regex_token_iterator()
事後条件

*this がシーケンスイテレータの終端。

regex_token_iterator(BidiIter begin, BidiIter end, basic_regex<BidiIter> const &rex)
パラメータ
  • begin -- 検索する文字範囲の先頭。

  • end -- 検索する文字範囲の終端。

  • rex -- 検索する正規表現パターン。

要件

[begin,end) が有効な範囲。

template<typename LetExpr>
regex_token_iterator(BidiIter begin, BidiIter end, basic_regex<BidiIter> const &rex, unspecified args)
パラメータ
  • begin -- 検索する文字範囲の先頭。

  • end -- 検索する文字範囲の終端。

  • rex -- 検索する正規表現パターン。

  • args -- 意味アクションに対して引数束縛した let 式。

要件

[begin,end) が有効な範囲。

template<typename Subs>
regex_token_iterator(BidiIter begin, BidiIter end, basic_regex<BidiIter> const &rex, Subs const &subs, regex_constants::match_flag_type flags = regex_constants::match_default)
パラメータ
  • begin -- 検索する文字範囲の先頭。

  • end -- 検索する文字範囲の終端。

  • rex -- 検索する正規表現パターン。

  • subs -- トークンとして扱う部分マッチを表す整数範囲。

  • flags -- シーケンスに対して正規表現がどのようにマッチするかを制御する省略可能なマッチフラグ(match_flag_type を見よ)。

要件

[begin,end) が有効な範囲。

要件

subs-1 以上の整数、あるいは全要素が -1 以上の整数である配列か空でない std::vector<> のいずれか。

template<typename Subs, typename LetExpr>
regex_token_iterator(BidiIter begin, BidiIter end, basic_regex<BidiIter> const &rex, Subs const &subs, unspecified args, regex_constants::match_flag_type flags = regex_constants::match_default)
パラメータ
  • begin -- 検索する文字範囲の先頭。

  • end -- 検索する文字範囲の終端。

  • rex -- 検索する正規表現パターン。

  • subs -- トークンとして扱う部分マッチを表す整数範囲。

  • flags -- シーケンスに対して正規表現がどのようにマッチするかを制御する省略可能なマッチフラグ(match_flag_type を見よ)。

要件

[begin,end) が有効な範囲。

要件

subs-1 以上の整数、あるいは全要素が -1 以上の整数である配列か空でない std::vector<> のいずれか。

regex_token_iterator(regex_token_iterator<BidiIter> const &that)
事後条件

*this == that

regex_token_iterator<BidiIter> &operator=(regex_token_iterator<BidiIter> const &that)
事後条件

*this == that

regex_token_iterator 公開メンバ関数

value_type const &operator*() const
value_type const *operator->() const
regex_token_iterator<BidiIter> &operator++()

N == -1 であれば *this をシーケンスイテレータの終端と同値に設定する。1 N + 1 < subs.size() であれば N1 増やし、結果を ((subs[N] == -1) ? value_type(what.prefix().str()) : value_type(what[subs[N]].str())) と同値に設定する。それ以外の場合は、what.prefix().first != what[0].second かつ match_prev_avail 要素がフラグに設定されていなければ設定する。次に regex_search(what[0].second, end, what, *pre, flags) を呼び出したのと同様の振る舞いをする。ただし以下の点については振る舞いが異なる。前回見つかったマッチがゼロ幅(what[0].length() == 0)の場合、what[0].second を先頭とする非ゼロ幅マッチを探索する。これが失敗し、かつ what[0].second != suffix().second である場合に限り what[0].second + 1 を先頭とするマッチ(これもゼロ幅かもしれない)を探索する。そのようなマッチが見つかった場合は N0 に設定し、結果を ((subs[N] == -1) ? value_type(what.prefix().str()) : value_type(what[subs[N]].str())) と同値に設定する。マッチが見つからなかった場合は last_end を最後に見つかったマッチの終端に設定し、last_end != end かつ subs[0] == -1 であれば N-1 に、結果を value_type(last_end, end) と同値に設定する。それ以外の場合は *this をシーケンスの終端イテレータと等値に設定する。

regex_token_iterator<BidiIter> operator++(int)
1

訳注 N の説明は原文にもありませんが、構築直後は 0 である内部変数です。