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

Класс regex_iterator

Класс regex_iterator представляет собой итератор, который последовательно перебирает все совпадения регулярного выражения в строке. При разыменовании итератор возвращает объект match_results, содержащий информацию о текущем совпадении: полное совпадение и все захваченные подгруппы. Первым параметром конструктор принимает итератор начала строки, вторым - итератор конца строки, а третьим - объект regex с искомым шаблоном. Для обозначения конца перебора используется специальный "конечный" итератор, который создается конструктором по умолчанию.

Итератор regex_iterator полезен, когда нужно обработать все совпадения в строке, а не только первое. Например, с его помощью можно извлечь все числа из текста или все слова, соответствующие заданному шаблону.

Синтаксис

regex_iterator<BidirIt, CharT, Traits> // Создание итератора начала перебора: regex_iterator<BidirIt, CharT, Traits> it(begin, end, re); // Создание конечного итератора: regex_iterator<BidirIt, CharT, Traits> end;

Здесь begin и end - итераторы начала и конца обрабатываемой последовательности символов, а re - объект regex с шаблоном поиска.

Пример

Давайте найдем все числа в строке "abc 123 de 45 fg 6" и выведем их на экран:

#include <iostream> #include <regex> #include <string> using namespace std; int main() { string str = "abc 123 de 45 fg 6"; regex re("\\d+"); regex_iterator<string::iterator> it(str.begin(), str.end(), re); regex_iterator<string::iterator> end; for (; it != end; ++it) { cout << it->str() << endl; } return 0; }

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

123 45 6

Пример

Давайте найдем все слова, состоящие из двух букв, в строке "ab cd efg hi jk" и выведем каждое совпадение вместе с его позицией:

#include <iostream> #include <regex> #include <string> using namespace std; int main() { string str = "ab cd efg hi jk"; regex re("[a-z]{2}"); regex_iterator<string::iterator> it(str.begin(), str.end(), re); regex_iterator<string::iterator> end; for (; it != end; ++it) { cout << it->str() << " at " << it->position() << endl; } return 0; }

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

""ab" at 0" ""cd" at 3" ""hi" at 10" ""jk" at 13"

Пример

Давайте извлечем все подгруппы из строки "2024-01-15", соответствующей шаблону даты:

#include <iostream> #include <regex> #include <string> using namespace std; int main() { string str = "2024-01-15"; regex re("(\\d{4})-(\\d{2})-(\\d{2})"); regex_iterator<string::iterator> it(str.begin(), str.end(), re); regex_iterator<string::iterator> end; for (; it != end; ++it) { cout << "Year: " << (*it)[1].str() << endl; cout << "Month: " << (*it)[2].str() << endl; cout << "Day: " << (*it)[3].str() << endl; } return 0; }

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

"Year: 2024" "Month: 01" "Day: 15"

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

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