Вы не должны вызывать matches.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] с «а» (последняя буква альфа - последняя сопоставленная группа)
Чтобы получить все слово в группе, вы должны изменить шаблон на ([az] +) и повторно вызвать regex_search, как это было в вашем собственном ответе.
К сожалению ответить 2 года поздно, но если кто-то Googles здесь, как я, то, возможно, это будет еще полезно для него ...