Tengo un texto donde una fecha puede verse así: 2011-02-02
o así: 02/02/2011
, esto es lo que he escrito hasta ahora, y mi pregunta es, si hay un buen forma de combinar estas dos expresiones regulares en una?Combinando dos expresiones regulares C++ 0x
std::regex reg1("(\\d{4})-(\\d{2})-(\\d{2})");
std::regex reg2("(\\d{2})/(\\d{2})/(\\d{4})");
smatch match;
if(std::regex_search(item, match, reg1))
{
Date.wYear = atoi(match[1].str().c_str());
Date.wMonth = atoi(match[2].str().c_str());
Date.wDay = atoi(match[3].str().c_str());
}
else if(std::regex_search(item, match, reg2))
{
Date.wYear = atoi(match[3].str().c_str());
Date.wMonth = atoi(match[2].str().c_str());
Date.wDay = atoi(match[1].str().c_str());
}
Algunos sintaxis de expresiones regulares han llamado grupos. PCRE sí, pero no creo que admita nombres duplicados. Tal vez la pregunta es: ¿alguna de las variantes de expresiones regulares en C++ 0x admite grupos nombrados duplicados? –
No veo el beneficio. Esto es más fácil de leer que la expresión regular combinada. Esto beneficia el mantenimiento, que es un factor que no debe subestimarse. Este código incluso se puede leer sin documentación; combinándolo, debe documentar el "monstruo-regex". –