[re.regiter.general] (original) (raw)
The class template regex_iterator is an iterator adaptor.
It represents a new view of an existing iterator sequence, by enumerating all the occurrences of a regular expression within that sequence.
A regex_iterator uses regex_search to find successive regular expression matches within the sequence from which it was constructed.
After the iterator is constructed, and every time operator++ is used, the iterator finds and stores a value ofmatch_results<BidirectionalIterator>.
If the end of the sequence is reached (regex_search returns false), the iterator becomes equal to the end-of-sequence iterator value.
The default constructor constructs an end-of-sequence iterator object, which is the only legitimate iterator to be used for the end condition.
The result of operator* on an end-of-sequence iterator is not defined.
For any other iterator value a constmatch_results<BidirectionalIterator>& is returned.
The result ofoperator-> on an end-of-sequence iterator is not defined.
For any other iterator value a const match_results<BidirectionalIterator>* is returned.
It is impossible to store things into regex_iterators.
Two end-of-sequence iterators are always equal.
An end-of-sequence iterator is not equal to a non-end-of-sequence iterator.
Two non-end-of-sequence iterators are equal when they are constructed from the same arguments.
namespace std { template<class BidirectionalIterator,class charT = typename iterator_traits<BidirectionalIterator>::value_type,class traits = regex_traits<charT>> class regex_iterator { public: using regex_type = basic_regex<charT, traits>;using iterator_category = forward_iterator_tag;using iterator_concept = input_iterator_tag;using value_type = match_results<BidirectionalIterator>;using difference_type = ptrdiff_t;using pointer = const value_type*;using reference = const value_type&; regex_iterator(); regex_iterator(BidirectionalIterator a, BidirectionalIterator b,const regex_type& re, regex_constants::match_flag_type m = regex_constants::match_default); regex_iterator(BidirectionalIterator, BidirectionalIterator,const regex_type&&, regex_constants::match_flag_type = regex_constants::match_default) = delete; regex_iterator(const regex_iterator&); regex_iterator& operator=(const regex_iterator&);bool operator==(const regex_iterator&) const;bool operator==(default_sentinel_t) const { return *this == regex_iterator(); } const value_type& operator*() const;const value_type* operator->() const; regex_iterator& operator++(); regex_iterator operator++(int);private: BidirectionalIterator begin; BidirectionalIterator end; const regex_type* pregex; regex_constants::match_flag_type flags; match_results<BidirectionalIterator> match; };}