Почему Boost.Regex не находит несколько совпадений в одной строке?

Я пишу небольшую программу командной строки, которая запрашивает у пользователя многочлены в форме ax ^ 2 + bx ^ 1 + cx ^ 0. Я собираюсь проанализировать данные позже, но сейчас я просто пытаюсь проверить, смогу ли я сопоставить многочлен с регулярным выражением (\ + | - | ^) (\ d *) x \ ^ ([ 0-9 *] *) Моя проблема в том, что это не так t соответствует нескольким членам введенного пользователем полинома, если я не изменю его на ((\ + | - | ^) (\ d *) x \ ^ ([0-9 *] *)) * ( разница в том, что все выражение сгруппировано и имеет звездочку в конце). Первое выражение работает, если я набираю что-то вроде « 4x ^ 2 », но не « 4x ^ 2 + 3x ^ 1 + 2x ^ 0 », поскольку оно не проверяет несколько раз.

У меня вопрос, почему Boost.Regex regex_match () не находит несколько совпадений в одной строке? Это работает в редакторе регулярных выражений, который я использовал (Expresso), но не в реальном коде C ++. Это должно быть так?

Дайте мне знать, если что-то не имеет смысла, и я постараюсь уточнить. Спасибо за помощь.

Edit1: Вот мой код (я следую руководству здесь: http: // onlamp. com / pub / a / onlamp / 2006/04/06 / boostregex.html? page = 3 )

int main()
{
    string polynomial;

    cmatch matches; // matches

    regex re("((\\+|-|^)(\\d*)x\\^([0-9*]*))*");

    cout << "Please enter your polynomials in the form ax^2+bx^1+cx^0." << endl;

    cout << "Polynomial:";
    getline(cin, polynomial);

    if(regex_match(polynomial.c_str(), matches, re))
    {
        for(int i = 0; i < matches.size(); i++)
        {
            string match(matches[i].first, matches[i].second);
            cout << "\tmatches[" << i << "] = " << match << endl;
        }
    }

    system("PAUSE");
    return 0;
}

5
задан 15 November 2010 в 05:32
поделиться