std::regex_iterator

template<

    class BidirIt,
    class CharT = typename std::iterator_traits<BidirIt>::value_type,
    class Traits = std::regex_traits<CharT>

> class regex_iterator
(C++11 起)

std::regex_iterator 是访问底层字符序列中正则表达式的单独匹配的只读向前迭代器 (ForwardIterator) 。

在构造和每次自增时,它调用 std::regex_search 并记忆结果(即保存值 std::match_results<BidirIt> 的副本)。第一个对象可能在构造迭代器或进行首次解引用时读取。其他情况下,解引用只返回最近获得的正则表达式匹配副本。

默认构造的 std::regex_iterator 是序列尾迭代器。在抵达最后匹配(std::regex_search 返回 false )后自增合法的 std::regex_iterator 时,它变得等于序列尾迭代器。进一步解引用或自增它引发未定义行为。

典型的 std::regex_iterator 实现保有底层序列的开始和结束迭代器(二个 BidirIt 实例)、指向正则表达式的指针( const regex_type* )、匹配标志( std::regex_constants::match_flag_type )和当前匹配( std::match_results<BidirIt> )。

目录

类型要求

-
BidirIt 必须满足 BidirectionalIterator 的要求。

特化

提供对于常用字符序列类型的数个特化:

定义于头文件 <regex>
类型 定义
cregex_iterator regex_iterator<const char*>
wcregex_iterator regex_iterator<const wchar_t*>
sregex_iterator regex_iterator<std::string::const_iterator>
wsregex_iterator regex_iterator<std::wstring::const_iterator>

成员类型

成员类型 定义
value_type std::match_results<BidirIt>
difference_type std::ptrdiff_t
pointer const value_type*
reference const value_type&
iterator_category std::forward_iterator_tag
regex_type basic_regex<CharT, Traits>

成员函数

构造新的 regex_iterator
(公开成员函数)
(析构函数)
(隐式声明)
析构 regex_iterator ,包含缓存的值
(公开成员函数)
赋值内容
(公开成员函数)
比较两个 regex_iterator
(公开成员函数)
访问当前匹配
(公开成员函数)
推进迭代器到下一个匹配
(公开成员函数)

注意

程序员负责确保传递给迭代器构造函数的 std::basic_regex 对象活得长于迭代器。因为迭代器存储指向 regex 的指针,故在销毁 regex 后自增迭代器会访问悬垂指针。

若匹配的正则表达式部分仅是断言^$\b\B ),则存储于迭代器的匹配是零长度匹配,即 match[0].first == match[0].second

示例

#include <regex>
#include <iterator>
#include <iostream>
#include <string>
 
int main()
{
    const std::string s = "Quick brown fox.";
 
    std::regex words_regex("[^\\s]+");
    auto words_begin = 
        std::sregex_iterator(s.begin(), s.end(), words_regex);
    auto words_end = std::sregex_iterator();
 
    std::cout << "Found " 
              << std::distance(words_begin, words_end) 
              << " words:\n";
 
    for (std::sregex_iterator i = words_begin; i != words_end; ++i) {
        std::smatch match = *i;                                                 
        std::string match_str = match.str(); 
        std::cout << match_str << '\n';
    }   
}

输出:

Found 3 words:
Quick
brown
fox.

参阅

标识一个正则表达式匹配,包含所有子表达式匹配
(类模板)
(C++11)
检查正则表达式是否在字符串内任何位置出现
(函数模板)

版本历史

  • (当前 | 先前 2017年9月29日 (五) 08:15Fruderica讨论 | 贡献. . (4,149字节) (-2,513). . (撤销)
  • 当前 | 先前 2014年10月26日 (日) 18:06P12bot讨论 | 贡献 . . (6,662字节) (0). . (Fix some translations) (撤销)
  • 当前 | 先前 2013年7月2日 (二) 11:13P12bot讨论 | 贡献 . . (6,662字节) (-216). . (Use {{lc}}. Update links. Various fixes.) (撤销)
  • 当前 | 先前 2012年11月2日 (五) 11:51P12bot讨论 | 贡献 . . (6,878字节) (+257). . (r2.7.3) (机器人添加:de, en, es, fr, it, ja, pt, ru) (撤销)
  • 当前 | 先前 2012年10月27日 (六) 09:07P12讨论 | 贡献 . . (6,621字节) (0). . (1个修订: Translate from the English version) (撤销)
  • 当前 | 先前 2012年10月26日 (五) 06:00TranslationBot讨论 | 贡献. . (6,621字节) (-120). . (Translated from the English version using Google Translate) (撤销)
  • 当前 | 先前 2012年10月25日 (四) 15:33P12讨论 | 贡献 . . (6,741字节) (0). . (1个修订: Translate from the English version) (撤销)
  • 当前 | 先前) 2012年10月25日 (四) 12:00TranslationBot讨论 | 贡献. . (6,741字节) (+6,741). . (Translated from the English version using Google Translate)