No debe llamar matches.size() antes de la verificación de que algo estaba igualada, es decir, su código debería ser algo así como esto:
#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;
La salida sería "no hemos encontrado nada", porque regex_match intenta hacer coincidir la cadena completa Lo que quiere es probablemente regex_search que está buscando una subcadena. El código siguiente podría ser un poco mejor para usted:
#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;
Pero es la salida única "2", es decir, coincide con [0] con "alfa" y coincidencias [1] con "a" (la última letra de la alfa - el último grupo coincide)
Para obtener la palabra completa en el grupo, debe cambiar el patrón a ([az] +) y llamar al regex_search repetidamente como lo hizo en su propia respuesta.
este momento para responder 2 años de retraso, pero si alguien googles aquí como lo hice, entonces tal vez será todavía útil para él ...