#include <iostream>
#include <regex>
#include <string>
using namespace std;
int main() {
std::string sconf = "TEMP_SOURCE=abcd\n INTERVAL=10\n MIN_SPEED=0\n POLICY=60:250 50:0 30:9\n";
std::smatch m;
/*
* match blank lines, trailing spaces
* and bash like comments
*/
std::string bc = "(?:\\s*(?:#.*[\r\n])*)*";
/*
* refex to match allowed numbers
*/
std::string num = "([0-9]|10|250)";
/*
* match afsc config file
*/
std::regex r(bc + "TEMP_SOURCE=([-_./[:alnum:]]+)"+
bc + "INTERVAL=(\\d+)"+
bc + "MIN_SPEED=([0-9]|10|250)"+
bc + "POLICY=((?:\\d+:(?:[0-9]|10|250)\\s+)+)" + bc);
std::regex_match(sconf, m, r);
std::cout <<m.size();
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8cmVnZXg+CiNpbmNsdWRlIDxzdHJpbmc+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IG1haW4oKSB7CgkKCXN0ZDo6c3RyaW5nIHNjb25mID0gIlRFTVBfU09VUkNFPWFiY2RcbiBJTlRFUlZBTD0xMFxuIE1JTl9TUEVFRD0wXG4gUE9MSUNZPTYwOjI1MCA1MDowIDMwOjlcbiI7CglzdGQ6OnNtYXRjaCBtOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgKiBtYXRjaCBibGFuayBsaW5lcywgdHJhaWxpbmcgc3BhY2VzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICogYW5kIGJhc2ggbGlrZSBjb21tZW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICBzdGQ6OnN0cmluZyBiYyA9ICIoPzpcXHMqKD86Iy4qW1xyXG5dKSopKiI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgKiByZWZleCB0byBtYXRjaCBhbGxvd2VkIG51bWJlcnMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICovICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgIHN0ZDo6c3RyaW5nIG51bSA9ICIoWzAtOV18MTB8MjUwKSI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAqIG1hdGNoIGFmc2MgY29uZmlnIGZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgc3RkOjpyZWdleCByKGJjICsgIlRFTVBfU09VUkNFPShbLV8uL1s6YWxudW06XV0rKSIrICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBiYyArICJJTlRFUlZBTD0oXFxkKykiKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgYmMgKyAiTUlOX1NQRUVEPShbMC05XXwxMHwyNTApIisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBiYyArICJQT0xJQ1k9KCg/OlxcZCs6KD86WzAtOV18MTB8MjUwKVxccyspKykiICsgYmMpOyAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgc3RkOjpyZWdleF9tYXRjaChzY29uZiwgbSwgcik7IAogICAgCiAgICBzdGQ6OmNvdXQgPDxtLnNpemUoKTsKCXJldHVybiAwOwp9