Boost С++ regex - как получить несколько совпадений

Если у меня есть простой шаблон регулярного выражения, например "ab". и у меня есть строка, которая имеет несколько совпадений, таких как "abc abd". Если я сделаю следующее...

boost::match_flag_type flags = boost::match_default;
boost::cmatch mcMatch;
boost::regex_search("abc abd", mcMatch, "ab.", flags)

Затем mcMatch содержит только первый результат "abc". Как я могу получить все возможные совпадения?

Ответы

Ответ 1

Вы можете использовать boost::sregex_token_iterator, как в этом коротком примере:

#include <boost/regex.hpp>
#include <iostream>
#include <string>

int main() {
    std::string text("abc abd");
    boost::regex regex("ab.");

    boost::sregex_token_iterator iter(text.begin(), text.end(), regex, 0);
    boost::sregex_token_iterator end;

    for( ; iter != end; ++iter ) {
        std::cout<<*iter<<'\n';
    }

    return 0;
}

Выход из этой программы:

abc
abd