Поделиться через


Класс regex_token_iterator

Класс итератора для подстрок соответствия.

Синтаксис

template<class BidIt,
   class Elem = typename std::iterator_traits<BidIt>::value_type,
   class RxTraits = regex_traits<Elem> >
class regex_token_iterator

Параметры

BidIt
Тип итератора для подстрок соответствия.

Elem
Тип элементов для обеспечения соответствия.

RXtraits
Класс характеристик для элементов.

Замечания

Шаблон класса описывает объект итератора постоянной пересылки. По существу, он содержит объект regex_iterator , который использует для поиска соответствий регулярного выражения в последовательности символов. Он извлекает объекты типа sub_match<BidIt> , представляющие подстроки соответствия, идентифицируемые значениями индекса в хранимом векторе subs , для каждого совпадения регулярного выражения.

Значение индекса -1 обозначает, что последовательность символов начинается сразу после окончания предыдущего совпадения регулярного выражения или в начале последовательности символов, если нет предыдущего совпадения регулярного выражения, и продолжается до (но не включает) первого символа текущего совпадения регулярного выражения или до конца последовательности символов, если нет текущего совпадения. Любое другое значение индекса idx определяет содержимое группы записи, содержащейся в it.match[idx].

Участники

Элемент Значение по умолчанию
private regex_iterator<BidIt, Elem, RXtraits> it
private vector<int> subs
private int pos

Конструкторы

Конструктор Description
regex_token_iterator Формирует итератор.

Определения типов

Введите имя Description
difference_type Тип разницы итератора.
iterator_category Тип категории итератора.
pointer Тип указателя на совпадение.
reference Тип ссылки на подстроку соответствия.
regex_type Тип регулярного выражения для сопоставления.
value_type Тип подстроки соответствия.

Операторы

Operator Description
оператор!= Сравнивает итераторы на неравенство.
operator* Обращается к заданной подстроке соответствия.
оператор++ Увеличивает значение итератора.
operator== Сравнивает итераторы на равенство.
operator-> Обращается к заданной подстроке соответствия.

Требования

Заголовок:<regex>

Пространство имен: std

Пример

#include <regex>
#include <iostream>

typedef std::regex_token_iterator<const char *> Myiter;
int main()
    {
    const char *pat = "aaxaayaaz";
    Myiter::regex_type rx("(a)a");
    Myiter next(pat, pat + strlen(pat), rx);
    Myiter end;

// show whole match
    for (; next != end; ++next)
        std::cout << "match == " << next->str() << std::endl;
    std::cout << std::endl;

// show prefix before match
    next = Myiter(pat, pat + strlen(pat), rx, -1);
    for (; next != end; ++next)
        std::cout << "match == " << next->str() << std::endl;
    std::cout << std::endl;

// show (a) submatch only
    next = Myiter(pat, pat + strlen(pat), rx, 1);
    for (; next != end; ++next)
        std::cout << "match == " << next->str() << std::endl;
    std::cout << std::endl;

// show prefixes and submatches
    std::vector<int> vec;
    vec.push_back(-1);
    vec.push_back(1);
    next = Myiter(pat, pat + strlen(pat), rx, vec);
    for (; next != end; ++next)
        std::cout << "match == " << next->str() << std::endl;
    std::cout << std::endl;

// show prefixes and whole matches
    int arr[] = {-1, 0};
    next = Myiter(pat, pat + strlen(pat), rx, arr);
    for (; next != end; ++next)
        std::cout << "match == " << next->str() << std::endl;
    std::cout << 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 == aa
match == aa
match == aa

match ==
match == x
match == y
match == z

match == a
match == a
match == a

match ==
match == a
match == x
match == a
match == y
match == a
match == z

match ==
match == aa
match == x
match == aa
match == y
match == aa
match == z

regex_token_iterator::d ifference_type

Тип разницы итератора.

typedef std::ptrdiff_t difference_type;

Замечания

Тип является синонимом std::ptrdiff_t.

regex_token_iterator::iterator_category

Тип категории итератора.

typedef std::forward_iterator_tag iterator_category;

Замечания

Тип является синонимом std::forward_iterator_tag.

regex_token_iterator::operator!=

Сравнивает итераторы на неравенство.

bool operator!=(const regex_token_iterator& right);

Параметры

right
Итератор для сравнения.

Замечания

Функция-член возвращает значение !(*this == right).

regex_token_iterator::operator*

Обращается к заданной подстроке соответствия.

const sub_match<BidIt>& operator*();

Замечания

Функция-член возвращает объект sub_match<BidIt> , представляющий группу записи, указанную значением индекса subs[pos].

regex_token_iterator::operator++

Увеличивает значение итератора.

regex_token_iterator& operator++();

regex_token_iterator& operator++(int);

Замечания

Если сохраненный итератор it является итератором конца последовательности, то первый оператор задает для сохраненного значения pos значение subs.size() (образуя, тем самым, итератор конца последовательности). В противном случае оператор увеличивает сохраненное значение pos. Если результат равен значению subs.size(), он задает сохраненное значение pos равным нулю и увеличивает значение сохраненного итератора it. Если при увеличении сохраненного итератора он остается неравным итератору конца последовательности, оператор не больше ничего не делает. В противном случае, если предыдущее совпадение остановилось в конце последовательности символов, оператор задает для сохраненного значения pos значение subs.size(). В противном случае оператор многократно увеличивает сохраненное значение pos до pos == subs.size() или subs[pos] == -1 (поэтому следующее разыменование итератора возвратит завершающую часть последовательности символов, если одно из значений индекса равно -1). Во всех случаях оператор возвращает объект.

Второй оператор создает копию объекта, увеличивает объект, а затем возвращает копию.

regex_token_iterator::operator==

Сравнивает итераторы на равенство.

bool operator==(const regex_token_iterator& right);

Параметры

right
Итератор для сравнения.

Замечания

Функция-член возвращает значение it == right.it && subs == right.subs && pos == right.pos.

regex_token_iterator::operator->

Обращается к заданной подстроке соответствия.

const sub_match<BidIt> * operator->();

Замечания

Функция-член возвращает указатель на объект sub_match<BidIt> , представляющий группу записи, указанную значением индекса subs[pos].

regex_token_iterator::p ointer

Тип указателя на совпадение.

typedef sub_match<BidIt> *pointer;

Замечания

Этот тип является синонимом для sub_match<BidIt>*, где BidIt — параметр шаблона.

regex_token_iterator::reference

Тип ссылки на подстроку соответствия.

typedef sub_match<BidIt>& reference;

Замечания

Этот тип является синонимом для sub_match<BidIt>&, где BidIt — параметр шаблона.

regex_token_iterator::regex_token_iterator

Формирует итератор.

regex_token_iterator();

regex_token_iterator(BidIt first, BidIt last,
    const regex_type& re, int submatch = 0,
    regex_constants::match_flag_type f = regex_constants::match_default);

regex_token_iterator(BidIt first, BidIt last,
    const regex_type& re, const vector<int> submatches,
    regex_constants::match_flag_type f = regex_constants::match_default);

template <std::size_t N>
regex_token_iterator(BidIt first, BidIt last,
    const regex_type& re, const int (&submatches)[N],
    regex_constants::match_flag_type f = regex_constants::match_default);

Параметры

first
Начало последовательности для сопоставления.

last
Конец последовательности для сопоставления.

ре
Регулярное выражение для соответствий.

f
Флаги для соответствий.

Замечания

Первый конструктор создает итератор конца последовательности.

Второй конструктор создает объект, сохраненный итератор it которого инициализируется regex_iterator<BidIt, Elem, RXtraits>(first, last, re, f), сохраненный вектор subs которого содержит строго одно целочисленное значение, со значением submatch, сохраненное значение pos которого равно нулю. Примечание. Получившийся объект извлекает подстроку соответствия, определяемую по значению индекса submatch , для каждого успешного совпадения с регулярным выражением.

Третий конструктор создает объект, сохраненный итератор it которого инициализируется regex_iterator<BidIt, Elem, RXtraits>(first, last, re, f), сохраненный вектор subs которого содержит копию аргумента конструктора submatchesи сохраненное значение pos которого равно нулю.

Четвертый конструктор создает объект, сохраненный итератор it которого инициализируется regex_iterator<BidIt, Elem, RXtraits>(first, last, re, f), сохраненный вектор subs которого содержит значения N , на которые указывает аргумент конструктора submatches, и сохраненное значение которого pos равно нулю.

regex_token_iterator::regex_type

Тип регулярного выражения для сопоставления.

typedef basic_regex<Elem, RXtraits> regex_type;

Замечания

Typedef является синонимом basic_regex<Elem, RXtraits>.

regex_token_iterator::value_type

Тип подстроки соответствия.

typedef sub_match<BidIt> value_type;

Замечания

Этот тип является синонимом для sub_match<BidIt>, где BidIt — параметр шаблона.

См. также

<regex>
Класс regex_constants
Класс regex_error
<функции regex>
Класс regex_iterator
<Операторы regex>
Класс regex_traits
<regex> typedefs