std::regex_token_iterator<BidirIt,CharT,Traits>::regex_token_iterator

来自cppreference.com
regex_token_iterator();
(1) (C++11 起)
regex_token_iterator( BidirIt a, BidirIt b,

                      const regex_type& re,
                      int submatch = 0,
                      std::regex_constants::match_flag_type m =

                          std::regex_constants::match_default );
(2) (C++11 起)
regex_token_iterator( BidirIt a, BidirIt b,

                      const regex_type& re,
                      const std::vector<int>& submatches,
                      std::regex_constants::match_flag_type m =

                          std::regex_constants::match_default );
(3) (C++11 起)
regex_token_iterator( BidirIt a, BidirIt b,

                      const regex_type& re,
                      std::initializer_list<int> submatches,
                      std::regex_constants::match_flag_type m =

                          std::regex_constants::match_default );
(4) (C++11 起)
template <std::size_t N>

regex_token_iterator( BidirIt a, BidirIt b,
                      const regex_type& re,
                      const int (&submatches)[N],
                      std::regex_constants::match_flag_type m =

                          std::regex_constants::match_default );
(5) (C++11 起)
regex_token_iterator( const regex_token_iterator& other );
(6) (C++11 起)
regex_token_iterator( BidirIt a, BidirIt b,

                      const regex_type&& re,
                      int submatch = 0,
                      std::regex_constants::match_flag_type m =

                          std::regex_constants::match_default ) = delete;
(7) (C++11 起)
regex_token_iterator( BidirIt a, BidirIt b,

                      const regex_type&& re,
                      const std::vector<int>& submatches,
                      std::regex_constants::match_flag_type m =

                          std::regex_constants::match_default ) = delete;
(8) (C++11 起)
regex_token_iterator( BidirIt a, BidirIt b,

                      const regex_type&& re,
                      std::initializer_list<int> submatches,
                      std::regex_constants::match_flag_type m =

                          std::regex_constants::match_default ) = delete;
(9) (C++11 起)
template <std::size_t N>

regex_token_iterator( BidirIt a, BidirIt b,
                      const regex_type&& re,
                      const int (&submatches)[N],
                      std::regex_constants::match_flag_type m =

                          std::regex_constants::match_default ) = delete;
(10) (C++11 起)

构造新的 regex_token_iterator

1) 默认构造函数。构造序列尾迭代器。
2-5) 首先,复制出 submatchessubmatch 参数的请求的子匹配列表,到存储于迭代器的成员列表中,再通过传递 abrem 到其四参数构造函数(该构造函数进行到 std::regex_search 的初始调用)构造成员 std::regex_iterator ,然后设置子匹配的内部计数器为零。
  • 若构造后,成员 regex_iterator 不是序列尾迭代器,则设置成员指针直指向当前 std::sub_match 的地址。
  • 否则(若成员 regex_iterator 是序列尾迭代器),但值 -1submatches/submatch 中的值之一,则将 *this 转变为指向范围 [a,b)后缀迭代器(整个字符串是非匹配的后缀)
  • 否则,(若 -1 不在子匹配列表中),转变 *this 为序列尾迭代器。

submatches 中任何值小于 -1 则行为未定义。

6) 复制构造函数:进行逐元素赋值(包含复制成员 regex_iterator 和成员指向 sub_match 指针)。
7-10) 禁止以临时 regex 调用重载 (2-5) ,因为否则返回的迭代器会被立即非法化。

参数

a - 指向目标字符序列起始的老式双向迭代器 (LegacyBidirectionalIterator)
b - 指向目标字符序列结尾的老式双向迭代器 (LegacyBidirectionalIterator)
re - 用于在目标字符序列中搜索的正则表达式
submatch - 应当返回的子匹配下标。 "0" 表示完整匹配,而 "-1" 表示未匹配的部分(例如匹配间的填塞)。
submatches - 应当在每个匹配内迭代的子匹配下标的序列,对于非匹配片段可能包含特殊值 -1
m - 掌管 re 行为的标志

参阅

缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

缺陷报告 应用于 出版时的行为 正确行为
LWG 2332 C++11 从临时 basic_regex 构造的 regex_token_iterator 立即变为非法 通过被删除的重载禁止这种构造