#include <regex>
#include <string>
#include <iostream>
#include <time.h>
using namespace std;
int main()
{
struct tm tm;
time_t t;
string data("On 2015-12-23, the shop will be closed, but on 2016-01-03, it will be open. Invalid date: 2016-13-32. ID: 1022015-12-233333.");
std::regex pattern("\\b\\d{4}[-]\\d{2}[-]\\d{2}\\b");
std::smatch result;
while (regex_search(data, result, pattern)) {
if (strptime(result[0].str().c_str(), "%Y-%m-%d", &tm) != NULL) {
std::cout << result[0] << std::endl;
}
data = result.suffix().str();
}
}
I2luY2x1ZGUgPHJlZ2V4PgojaW5jbHVkZSA8c3RyaW5nPgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDx0aW1lLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgppbnQgbWFpbigpCnsKCXN0cnVjdCB0bSB0bTsKICAgIHRpbWVfdCB0OwogICAgICAgIHN0cmluZyBkYXRhKCJPbiAyMDE1LTEyLTIzLCB0aGUgc2hvcCB3aWxsIGJlIGNsb3NlZCwgYnV0IG9uIDIwMTYtMDEtMDMsIGl0IHdpbGwgYmUgb3Blbi4gSW52YWxpZCBkYXRlOiAyMDE2LTEzLTMyLiBJRDogMTAyMjAxNS0xMi0yMzMzMzMuIik7CiAgICAgICAgc3RkOjpyZWdleCBwYXR0ZXJuKCJcXGJcXGR7NH1bLV1cXGR7Mn1bLV1cXGR7Mn1cXGIiKTsKICAgICAgICBzdGQ6OnNtYXRjaCByZXN1bHQ7CgogICAgICAgIHdoaWxlIChyZWdleF9zZWFyY2goZGF0YSwgcmVzdWx0LCBwYXR0ZXJuKSkgewogICAgICAgIAlpZiAoc3RycHRpbWUocmVzdWx0WzBdLnN0cigpLmNfc3RyKCksICIlWS0lbS0lZCIsICZ0bSkgIT0gTlVMTCkgewoJCQkgIHN0ZDo6Y291dCA8PCByZXN1bHRbMF0gPDwgc3RkOjplbmRsOwogICAgICAgIAl9CiAgICAgICAgCWRhdGEgPSByZXN1bHQuc3VmZml4KCkuc3RyKCk7CgkJfQp9