РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
429 of 815 menu

Класс regex_token_iterator

Класс regex_token_iterator представляет собой итератор, который используется для перебора токенов строки. Токенами могут быть как части строки, разделённые регулярным выражением, так и сами совпадения или их отдельные подсовпадения. В первом параметре конструктора мы передаём начало строки, во втором - конец строки, в третьем - объект regex с регулярным выражением, а в четвёртом - целое число или вектор целых чисел, указывающих, какие именно части совпадения следует извлекать. Значение -1 означает, что нужно вернуть часть строки между совпадениями.

Класс часто применяется вместе с алгоритмами стандартной библиотеки, например copy, для разбиения строки на токены или для извлечения всех совпадений и подсовпадений.

Синтаксис

regex_token_iterator<BidirectionalIterator> it(begin, end, re, submatch); regex_token_iterator<BidirectionalIterator> end;

Пример

Давайте разобьём строку "abcde" на токены с помощью регулярного выражения, которое ищет символ 'c'. Для этого передадим в качестве четвёртого параметра значение -1:

#include <iostream> #include <regex> #include <string> using namespace std; int main() { string str = "abcde"; regex re("c"); sregex_token_iterator it(str.begin(), str.end(), re, -1); sregex_token_iterator end; for (; it != end; ++it) { cout << *it << endl; } return 0; }

Результат выполнения кода:

"ab" "de"

Пример

Давайте теперь извлечём все совпадения регулярного выражения, которое ищет цифры в строке "12345". Для этого передадим в качестве четвёртого параметра значение 0:

#include <iostream> #include <regex> #include <string> using namespace std; int main() { string str = "12345"; regex re("\\d"); sregex_token_iterator it(str.begin(), str.end(), re, 0); sregex_token_iterator end; for (; it != end; ++it) { cout << *it << endl; } return 0; }

Результат выполнения кода:

1 2 3 4 5

Пример

Давайте извлечём отдельные подсовпадения. Создадим регулярное выражение с двумя группами и передадим вектор {1, 2}, чтобы получить содержимое первой и второй групп:

#include <iostream> #include <regex> #include <string> #include <vector> using namespace std; int main() { string str = "abcde"; regex re("(a)(b)"); vector<int> submatches = {1, 2}; sregex_token_iterator it(str.begin(), str.end(), re, submatches); sregex_token_iterator end; for (; it != end; ++it) { cout << *it << endl; } return 0; }

Результат выполнения кода:

"a" "b"

Смотрите также

  • класс regex,
    который представляет регулярное выражение
  • класс regex_iterator,
    который перебирает совпадения регулярного выражения
  • функция regex_search,
    которая ищет первое совпадение в строке
  • функция regex_replace,
    которая заменяет совпадения в строке
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить