Después de un día de hackear y leer, no he tenido suerte con el motor de expresiones regulares de boost, espero que alguien aquí pueda ayudar.aumentar los grupos de captura de expresiones regulares
Quiero tomar el primer campo de cada línea donde el último campo coincide con alguna entrada.
string input =
"449 a dingo ate my baby THING\n"
"448 a dingo ate my baby THING\n"
"445 a dingo ate my baby BOOGNISH\n"
"446 a dingo ate my baby BOOGNISH\n"
"447 a dingo ate my baby STUFF\n";
Digamos Doy mi expresión regular el la siguiente cadena ...
string re = "^([0-9]+).+?boognish$";
boost::regex expression(re,boost::regex::perl | boost:regex::icase);
y luego configurar mi partido
const int subs[] = { 0, 1 };
boost::sregex_token_iterator it(input.begin(), input.end(), expression, subs);
boost::sregex_token_iterator end;
while (it != end)
{
fprintf(stderr,"%s|\n", it->str().c_str());
*it++;
}
Aquí está la salida que recibo de impulso , recuerda que pedí tanto la línea completa como el grupo 1, también pedí un "|" para que podamos ver fácilmente el final de la línea:
449 a dingo ate my baby THING
448 a dingo ate my baby THING
445 a dingo ate my baby BOOGNISH|
449|
446 a dingo ate my baby BOOGNISH|
446|
Realmente quiero 445 | y 446 | solo, pero me da 449 (hasta que alcanza el primer BOOGNISH) y luego 446. He probado esto en otros analizadores, y parece funcionar bien. ¿Qué estoy haciendo mal con boost?
¡Gracias de antemano!
'* it ++' debe ser '++ it'. Pero eso (probablemente) no afecta sus resultados. –