Собственно, вопрос больше по самим регэкспам.
Выражение ниже парсит строки с отдельными слагаемыми произвольного полинома - выражения вида '13*x^4'. Однако регэксп не работает, когда слагаемое вырождается до константы. То есть ещё '13*x' оно распознаёт, а вот '13' уже нет, выдаёт пустой match_results.
std::regex rex("([-+]?[1-9]?[0-9]*)"
"(\\*?)"
"(x)"
"(\\^?)"
"([1-9]?[0-9]*)",
std::regex::extended);