Вы можете объединить два регулярных выражения с помощью |
. Поскольку только один из |
может быть сопоставлен, мы можем затем объединить группы захвата различных частей и представить их как единое целое.
std::regex reg1("(\\d{4})-(\\d{2})-(\\d{2})|(\\d{2})/(\\d{2})/(\\d{4})");
std::smatch match;
if(std::regex_search(item, match, reg1)) {
std::cout << "Year=" << atoi(match.format("$1$6").c_str()) << std::endl;
std::cout << "Month=" << atoi(match.format("$2$5").c_str()) << std::endl;
std::cout << "Day=" << atoi(match.format("$3$4").c_str()) << std::endl;
}
(К сожалению, регулярное выражение C ++ 0x не поддерживает именованную группу захвата, в противном случае я бы предложил перебрать массив регулярных выражений, используя вместо этого именованный захват.)