#include <iostream>
#include <regex>
using namespace std;

int main() {
	std::string buffer = " li 12.12 si 43,23 45 31 uf 889 uf31 3.12345";
	std::regex rx(R"((?:^|\s)([+-]?[[:digit:]]+(?:\.[[:digit:]]+)?)(?=$|\s))");
	std::smatch m;
	std::string str = buffer;
    while (regex_search(str, m, rx)) {
		std::cout << "Number found: " << m[1] << std::endl;
		str = m.suffix().str();
	} // 12.12 45 31 889 3.12345
	return 0;
}