#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;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8cmVnZXg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpIHsKCXN0ZDo6c3RyaW5nIGJ1ZmZlciA9ICIgbGkgMTIuMTIgc2kgNDMsMjMgNDUgMzEgdWYgODg5IHVmMzEgMy4xMjM0NSI7CglzdGQ6OnJlZ2V4IHJ4KFIiKCg/Ol58XHMpKFsrLV0/W1s6ZGlnaXQ6XV0rKD86XC5bWzpkaWdpdDpdXSspPykoPz0kfFxzKSkiKTsKCXN0ZDo6c21hdGNoIG07CglzdGQ6OnN0cmluZyBzdHIgPSBidWZmZXI7CiAgICB3aGlsZSAocmVnZXhfc2VhcmNoKHN0ciwgbSwgcngpKSB7CgkJc3RkOjpjb3V0IDw8ICJOdW1iZXIgZm91bmQ6ICIgPDwgbVsxXSA8PCBzdGQ6OmVuZGw7CgkJc3RyID0gbS5zdWZmaXgoKS5zdHIoKTsKCX0gLy8gMTIuMTIgNDUgMzEgODg5IDMuMTIzNDUKCXJldHVybiAwOwp9