En Perl, puedo hacer esto:std :: equivalente de expresiones regulares de '/ g' modificador mundial
$text = '1747239';
@matches = ($text =~ m/(\d)/g);
# @matches now contains ('1', '7', '4', '7', '2', '3', '9')
Usando C++ coincidencia de expresiones regulares, ¿cuál es la mejor manera de replicar este comportamiento para que consigo un partido establecer incluyendo todos los partidos?
tengo unas pocas cosas en este momento: -
compiledRegex = std::regex(regex, std::tr1::regex_constants::extended);
regex_search(text, results, compiledRegex);
int count = results.size();
// Alloc pointer array based on count * sizeof(mystruct).
for (std::cmatch::iterator match = results.begin();
match != results.end();
++match)
{
// Do something with match;
}
Sin embargo, esto sólo me va a dar el primer partido, al igual que Perl sin la/g, que está muy bien, pero me gustaría el efecto/g.
Entonces, ¿hay una buena manera de hacerlo, o debo seguir ejecutando la expresión regular una y otra vez?
Eso es más o menos lo que estaba de terminar con, supongo que estaba esperando una bandera para hacer regex_search hacer eso. Presumiblemente, ¿necesita mover el puntero de texto al final de la última coincidencia en cada iteración? –
@JonB Tienes razón. Se deben usar los iteradores en lugar de cadena. Al final de cada iteración, el iterador de búsqueda debe actualizarse, usando 'results [0] .second'. He actualizado mi respuesta de manera convincente. – Eugene