The code below demonstrates how to parse GUID in C++ using a regular expression:
#include <iostream>
#include <string>
#include <regex>
int main()
{
static const std::wregex regex(L"[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}");
std::wstring sample = L"850fe1da-0ea6-c1a8-9810-0c1cece30698";
std::match_results<std::wstring::const_iterator> match;
if (std::regex_match(sample, match, regex))
{
std::wcout << L"matches" << std::endl;
}
else
{
std::wcout << L"does not match" << std::endl;
}
return 0;
}
The code can be compiled with MS VS using the following command:
cl /std:c++17 /EHsc a.cpp
The example below parses GUID along with a date and time:
#include <iostream>
#include <string>
#include <regex>
int main()
{
static const std::wregex regex(L".*\\\\([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})\\\\SomeSubdir\\\\SomePrefix_([0-2][0-9][0-9][0-9])([0-1][0-9])([0-3][0-9])\\-([0-1][0-9])([0-5][0-9])([0-5][0-9])\\.dat");
const std::wstring sample = L"ProgramData\\MyApp\\Data\5e1e02b0-a011-4f51-8bad-9775c15235b3\\f7da40c1-b340-4bbc-8cdd-45656d1013a0\\SomeSubdir\\SomePrefix_20190714-015315.dat";
std::wcmatch match;
if (std::regex_match(sample.c_str(), match, regex))
{
std::wcout << L"matches" << std::endl;
std::wcout << L"the number of matches is " << match.size() << std::endl;
if (match.size() == 8)
{
int year = std::stoi(match[2].str());
int month = std::stoi(match[3].str());
int day = std::stoi(match[3].str());
int hour = std::stoi(match[4].str());
int minute = std::stoi(match[5].str());
int second = std::stoi(match[6].str());
std::wcout << L"GUID: " << match[1].str() << L", date: " << year << '-'<< month << '-' << day << ' ' << hour << ':' << minute << ':' << second << std::endl;
}
}
else
{
std::wcout << L"does not match" << std::endl;
}
return 0;
}