Я пишу небольшую программу командной строки, которая запрашивает у пользователя многочлены в форме 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;
}