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

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

                const regex_type& re,
                std::regex_constants::match_flag_type m =

                    std::regex_constants::match_default );
(2) (C++11 起)
regex_iterator( const regex_iterator& );
(3) (C++11 起)
regex_iterator( BidirIt, BidirIt,

                const regex_type&&,
                std::regex_constants::match_flag_type =

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

构造新的 regex_iterator

1) 默认构造函数。构造序列尾迭代器。
2) 从字符序列 [ab)、正则表达式 re 和掌管匹配行为的标志 m 构造 regex_iterator。此构造函数以此数据进行 std::regex_search 的初始调用。若此初始调用结构为 false,则设置 *this 为序列尾迭代器。
3) 复制 regex_iterator
4) 不允许以正则表达式临时量调用重载 2,因为返回的迭代器会立即失效。

参数

a - 指向目标字符序列起始的老式双向迭代器 (LegacyBidirectionalIterator)
b - 指向目标字符序列末尾的老式双向迭代器 (LegacyBidirectionalIterator)
re - 用于搜索目标字符序列的正则表达式
m - 掌管 re 行为的标志

示例

#include <iostream>
#include <regex>
#include <string_view>
 
int main()
{
    constexpr std::string_view str{R"(
        #ONE: *p = &Mass;
        #Two: MOV %rd, 42
    )"};
    const std::regex re("[a-w]");
 
    // 创建 regex_iterator,重载 (2)
    auto it = std::regex_iterator<std::string_view::iterator>
    {
        str.cbegin(), str.cend(),
        re // re 是左值;如果改用立即表达式,如 std::regex{"[a-z]"}
           // 则会由于重载 (4) 被弃置而产生错误
    };
 
    for (decltype(it) last /* overload (1) */; it != last; ++it)
        std::cout << (*it).str();
    std::cout << '\n';
}

输出:

password

缺陷报告

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

缺陷报告 应用于 出版时的行为 正确行为
LWG 2332 C++11 从临时 basic_regex 构造的 regex_iterator 会立即失效 通过被弃置的重载禁止这种构造