Предположим, есть строка с именем path, которая должна соответствовать нескольким шаблонам.Строка регулярного выражения имеет следующий вид:
std::string regexString="(/api/Attachment)|(/api/Attachment/upload)|(/api/Attachment/download)|(/api/v1/ApiTest)|(/api/v1/ApiTest/get/[^/]*/[^/]*)|(/api/v1/ApiTest/[^/]*/List)";
Соответствующий код выглядит следующим образом:
std::smatch result;
if (std::regex_match(path, result, regexString))
{
for (size_t i = 1; i < result.size(); i++)
{
/// Question: Is there any better way to find the sub-match index without using a loop?
if (!result[i].matched)
continue;
if (result[i].str() == path)
{
std::cout<<"Match a pattern with index "<<i<<std::endl;
/// Do something with it;
break;
}
}
}
else
{
std::cout<<"Match none"<<std::endl;
}
Вышеприведенная программа работает, но, учитывая большое количество шаблонов, цикл в ней работаетнемного некрасиво и неэффективно.Как показывают комментарии в коде, у меня вопрос, есть ли способ найти индекс суб-соответствия без использования циклов?
Любые комментарии будут высоко оценены, спасибо!