Вы не должны вызывать match.size () перед проверкой того, что что-то было сопоставлено, т. Е. Ваш код должен выглядеть примерно так:
#include <boost/regex.hpp>
boost::cmatch matches;
if (boost::regex_match("alpha beta", matches, boost::regex("([a-z])+")))
cout << "found: " << matches.size() << endl;
else
cout << "nothing found" << endl;
Вывод будет "ничего не найдено", потому что regex_match пытается соответствовать всей строке. Вероятно, вам нужен regex_search, который ищет подстроку. Код ниже может быть немного лучше для вас:
#include <boost/regex.hpp>
boost::cmatch matches;
if (boost::regex_search("alpha beta", matches, boost::regex("([a-z])+")))
cout << "found: " << matches.size() << endl;
else
cout << "nothing found" << endl;
Но выводит только «2», то есть сопоставляет [0] с «альфой» и сопоставляет [1] с «а» (последняя буква альфа - последняя найденная группа)
Чтобы получить все слово в группе, вы должны изменить шаблон на ([a-z] +) и повторно вызывать regex_search, как вы это делали в своем собственном ответе.
Извините, что отвечаю с опозданием на 2 года, но если кто-то погуглит здесь, как я, то, возможно, это все равно будет ему полезно ...