Consigue el último partido con Boost :: Regex

Tengo una expresión regular en C ++ con Boost que coincide con líneas en cadenas de varias líneas. La búsqueda Regex encuentra la primera coincidencia, sin embargo, estoy interesado en la última línea que coincida.

El código que estoy usando ahora es algo como esto:

matched = boost::regex_search(input, results, regex); if (!matched) { return -1; // error code } matched_string = results["Group"]; 

Si la regex era "(?Data.)" Y la input fue "Data1 Data2 Data3" , matched_string ahora es "Data1" . Quiero que sea "Data3" .

operator[] de match_results devuelve un sub_match . sub_match hereda std::pair de iteradores. Sus first y second miembros corresponden a rango emparejado. Por lo tanto, puede utilizar su second punto de inicio de una nueva búsqueda. Por ejemplo:

 string input = "Data1 Data2 Data3"; regex re("(?Data.)"); string::const_iterator begin = input.begin(), end = input.end(); smatch results; while ( regex_search( begin, end, results, re ) ) { smatch::value_type r = results["Group"]; begin = r.second; } 

Espero que esto ayude.