Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗cpSpRgNPB 40 of 696 menu
◀ ▶

Несохраняющие скобки в C++

Скобки ( ) выполняют две функции - группировка символов и функцию кармана. А что делать, если нужно сгруппировать, но в карман не класть? Для решения такой проблемы придуманы специальные несохраняющие скобки (?: ) - они группируют, но не кладут в карман.

В следующем примере первые скобки нам нужны для группировки, а вторые - для кармана. Однако, и те, и другие скобки сохраняют данные в карман:

std::string txt = "abab123" std::regex re(R"rx((ab)+([1-9]+))"); std::smatch res; std::regex_search(txt, res, re);

В результате в наших карманах будет следующее:

std::cout << res.str(0) << "\n" // выведет 'abab123' std::cout << res.str(1) << "\n" // выведет 'ab' std::cout << res.str(2) << "\n" // выведет '123'

Сделаем так, чтобы первая пара скобок только группировала, но не клала в карман:

std::string txt = "abab123" std::regex re(R"rx((?:ab)+([1-9]+))"); std::smatch res; std::regex_search(txt, res, re);

В результате в первом кармане будет наше число:

std::cout << res.str(1) << "\n" // выведет '123'
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить