Карманы при поиске в C++
Часто при поиске совпадения удобно разложить подстроку на так называемые карманы. Они представляют собой способ разбить найденное на отдельные части. Для их использования нужно заключить часть регулярки в круглые скобки.
Для примера возьмем такую строку:
std::string txt = "123 456";
Разложим подстроки с числами по карманам. Для этого напишем следующую регулярку:
std::regex re(R"((\d+) (\d+))");
std::smatch res;
std::regex_search(txt, res, re);
В результате мы получим объект std::smatch. В
его элементе с индексом 1 будет
лежать первый карман, в элементе с индексом
2 - второй карман, а в элементе с
индексом 0 - все найденное (так
называемый нулевой карман):
std::cout << res.str(0) << "\n"; // '123 456' - найденное
std::cout << res.str(1) << "\n"; // '123' - 1 карман
std::cout << res.str(2) << "\n"; // '456' - 2 карман
Дана строка, содержащая домен:
std::string txt = "sss domain.ru zzz";
Найдите этот домен и положите его имя в первый карман, а зону - во второй.
Дана строка, содержащая дату:
std::string txt = "31.12.2025";
Положите день в первый карман, месяц - во второй, а год - в третий.