Мое приложение имеет определенные пользователем шаблоны регулярных выражений, которые могут содержать до 3 групп захвата. Есть ли лучший способ реализовать следующий код?
std::string glyph1, glyph2, glyph3;
switch (regex.NumberOfCapturingGroups())
{
case 0:
default:
found = regex.PartialMatch(word);
break;
case 1:
found = regex.PartialMatch(word, &glyph1);
break;
case 2:
found = regex.PartialMatch(word, &glyph1, &glyph2);
break;
case 3:
found = regex.PartialMatch(word, &glyph1, &glyph2, &glyph3);
break;
}
if (found) {
// ...
}
К сожалению, возвращаемое значение является ложным, если регулярное выражение будет соответствовать, но было запрошено меньшее количество групп захвата.
Вы можете использовать список или вектор для этой проблемы. Вместо того, чтобы перегружать функцию, сделайте ее vector<std::string> glyph
параметра vector<std::string> glyph
и int n
для regex.NumberOfCapturingGroups()
.
vector<std::string> glyph;
regex.PartialMatch(word, glyph, regex.NumberOfCapturingGroups());
if (found) {
// ...
}
Затем просто используйте glyph[i]
для доступа к элементам.