31 Regular expressions library [re]

31.12 Regular expression iterators [re.iter]

31.12.1 Class template regex_­iterator [re.regiter]

31.12.1.4 regex_­iterator increment [re.regiter.incr]

regex_iterator& operator++();

Effects: Создает локальную переменную start типа BidirectionalIterator и инициализирует ее значением match[0].second.

Если итератор содержит совпадение нулевой длины, а start == end оператор устанавливает *this итератор конца последовательности и возвращается *this.

В противном случае, если итератор содержит совпадение нулевой длины, оператор вызывает:

regex_search(start, end, match, *pregex,
             flags | regex_constants::match_not_null | regex_constants::match_continuous)

Если вызов вернул, true оператор вернется *this. В противном случае оператор увеличивает start и продолжает работу, как если бы последнее совпадение не было совпадением нулевой длины.

Если самый последний матч не был матч нулевой длины, оператор устанавливает flags на flags | regex_­constants​::​match_­prev_­avail и вызовы regex_­search(start, end, match, *pregex, flags). Если вызов возвращает false набор итераторов в итератор *this конца последовательности. Затем итератор возвращается *this.

Во всех случаях, когда вызов regex_­search возвращается true, match.prefix().first должно быть равно предыдущему значению match[0].second, и для каждого индекса i в полуоткрытом диапазоне, [0, match.size()) для которого match[i].matched есть true, match.position(i) должно возвращаться distance(begin, match[i].​first).

[ Note: Это означает, что это match.position(i) дает смещение от начала целевой последовательности, которое часто не совпадает с смещением от последовательности, переданной в вызове regex_­search. ] end note

Не указано, как реализация вносит эти корректировки.

[ Note: Это означает, что компилятор может вызвать функцию поиска, зависящую от реализации, и в этом случае определенная пользователем специализация regex_­search не будет вызываться. ] end note

regex_iterator operator++(int);

Effects: Как будто по:

regex_iterator tmp = *this;
++(*this);
return tmp;