PCRE PartialMatch динамическое количество групп

0

Мое приложение имеет определенные пользователем шаблоны регулярных выражений, которые могут содержать до 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) {
    // ...
}

К сожалению, возвращаемое значение является ложным, если регулярное выражение будет соответствовать, но было запрошено меньшее количество групп захвата.

Теги:
c++11
pcre

1 ответ

0

Вы можете использовать список или вектор для этой проблемы. Вместо того, чтобы перегружать функцию, сделайте ее 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] для доступа к элементам.

  • 0
    Хотя мне нравится эта идея, я вполне уверен, что это не то, как реализован pcrecpp (это определение метода не существует в pcre-8.36), и я действительно не хочу добавлять свой собственный код в pcre.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню