regex_iterator 类
匹配项的迭代器类。
语法
template<class BidIt,
class Elem = typename std::iterator_traits<BidIt>::value_type,
class RxTraits = regex_traits<Elem> >
class regex_iterator
参数
BidIt
子匹配项的迭代器类型。
Elem
要匹配的元素的类型。
RXtraits
元素的特征类。
备注
这个类模板描述常量前向迭代器对象。 它将其正则表达式对象 match_results<BidIt>
重复应用到迭代器范围 *pregex
定义的字符序列,以提取 [begin, end)
类型的对象。
构造函数
构造函数 | 说明 |
---|---|
regex_iterator | 构造迭代器。 |
Typedef
类型名称 | 说明 |
---|---|
difference_type | 迭代器差异的类型。 |
iterator_category | 迭代器类别的类型。 |
pointer | 指向一个匹配的指针的类型。 |
reference | 对匹配项的引用的类型。 |
regex_type | 要匹配的正则表达式类型。 |
value_type | 匹配的类型。 |
运算符
运算符 | 说明 |
---|---|
operator!= | 比较不相等的迭代器。 |
operator* | 访问指定的匹配项。 |
operator++ | 递增迭代器。 |
operator= | 比较迭代器是否相等。 |
operator-> | 访问指定的匹配项。 |
要求
标头:<regex>
命名空间: std
示例
有关正则表达式的示例,请参阅下面的文章:
// std__regex__regex_iterator.cpp
// compile with: /EHsc
#include <regex>
#include <iostream>
typedef std::regex_iterator<const char *> Myiter;
int main()
{
const char *pat = "axayaz";
Myiter::regex_type rx("a");
Myiter next(pat, pat + strlen(pat), rx);
Myiter end;
for (; next != end; ++next)
std::cout << "match == " << next->str() << 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 == a
match == a
match == a
regex_iterator::difference_type
迭代器差异的类型。
typedef std::ptrdiff_t difference_type;
注解
类型是 std::ptrdiff_t
的同义词。
regex_iterator::iterator_category
迭代器类别的类型。
typedef std::forward_iterator_tag iterator_category;
注解
类型是 std::forward_iterator_tag
的同义词。
regex_iterator::operator!=
比较不相等的迭代器。
bool operator!=(const regex_iterator& right);
参数
right
要进行比较的迭代器。
备注
成员函数返回 !(*this == right)
。
regex_iterator::operator*
访问指定的匹配项。
const match_results<BidIt>& operator*();
注解
该成员函数将返回存储值 match
。
regex_iterator::operator++
递增迭代器。
regex_iterator& operator++();
regex_iterator& operator++(int);
备注
如果当前匹配项不具有字符,则第一个运算符将调用 regex_search(begin, end, match, *pregex, flags | regex_constants::match_prev_avail | regex_constants::match_not_null)
;否则它会将存储的值 begin
推进到指向当前匹配项后的第一个字符,然后调用 regex_search(begin, end, match, *pregex, flags | regex_constants::match_prev_avail)
。 在任一情况下,如果搜索失败,则该运算符会将对象设置为序列末迭代器。 运算符返回该对象。
第二个运算符生成对象的副本,递增对象,然后返回副本。
regex_iterator::operator=
比较迭代器是否相等。
bool operator==(const regex_iterator& right);
参数
right
要进行比较的迭代器。
注解
如果 *this
和 right 均为序列末尾迭代器或均不为序列末尾迭代器且 begin == right.begin
、end == right.end
、pregex == right.pregex
和 flags == right.flags
,则此成员函数将返回 true。 否则,返回 false。
regex_iterator::operator->
访问指定的匹配项。
const match_results<BidIt> * operator->();
备注
此成员函数返回存储值 match
的地址。
regex_iterator::pointer
指向一个匹配的指针的类型。
typedef match_results<BidIt> *pointer;
备注
类型是 match_results<BidIt>*
的同义词,其中 BidIt
是模板参数。
regex_iterator::reference
对匹配项的引用的类型。
typedef match_results<BidIt>& reference;
备注
类型是 match_results<BidIt>&
的同义词,其中 BidIt
是模板参数。
regex_iterator::regex_iterator
构造迭代器。
regex_iterator();
regex_iterator(BidIt first,
BidIt last,
const regex_type& re,
regex_constants::match_flag_type f = regex_constants::match_default);
参数
first
要匹配的序列的开头。
last
要匹配的序列的结尾。
re
匹配项正则表达式。
f
匹配标志。
备注
第一个构造函数将构造序列末迭代器。 第二个构造函数使用 first 初始化存储的值 begin
,使用 last 初始化存储的值 end
,使用 &re
初始化存储的值 pregex
,并使用 f 初始化存储的值 flags
。 然后,它调用 regex_search(begin, end, match, *pregex, flags)
。 如果搜索失败,则构造函数会将对象设置为序列末迭代器。
regex_iterator::regex_type
要匹配的正则表达式类型。
typedef basic_regex<Elem, RXtraits> regex_type;
备注
typedef 是 basic_regex<Elem, RXtraits>
的同义词。
regex_iterator::value_type
匹配的类型。
typedef match_results<BidIt> value_type;
注解
类型是 match_results<BidIt>
的同义词,其中 BidIt
是模板参数。
另请参阅
<regex>
regex_constants 类
regex_error 类
<regex> 函数
regex_iterator 类
<regex> 运算符
regex_token_iterator 类
regex_traits 类
<regex> typedefs
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈