#include <stdio.h>
#include <stdlib.h>
#include <regex.h>
static const char *char_match = "^('(.|([\\]0))')";
int main()
{
regex_t re = {0};
if (regcomp(&re, char_match, REG_EXTENDED) != 0)
{
perror("Failed to compile RE."); }
// expected successed
const char *good[] =
{
"'a'",
"'\\0'",
"'0'",
"'\\'"
};
for (int i=0;i<sizeof(good)/sizeof(good[0]);++i)
{
int match = regexec(&re, good[i], 0, NULL, 0);
}
const char *bad[] =
{
"'ab'",
"'a",
"\\",
"\\\0",
"\0\\\0"
};
for (int i=0;i<sizeof(bad)/sizeof(bad[0]);++i)
{
int match = regexec(&re, bad[i], 0, NULL, 0);
}
regfree(&re);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHJlZ2V4Lmg+CgoKc3RhdGljIGNvbnN0IGNoYXIgKmNoYXJfbWF0Y2ggPSAiXignKC58KFtcXF0wKSknKSI7CgppbnQgbWFpbigpCnsKICAgIHJlZ2V4X3QgcmUgPSB7MH07CiAgICBpZiAocmVnY29tcCgmcmUsIGNoYXJfbWF0Y2gsIFJFR19FWFRFTkRFRCkgIT0gMCkKICAgIHsKICAgICAgICBwZXJyb3IoIkZhaWxlZCB0byBjb21waWxlIFJFLiIpOwogICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKICAgIH0KICAgIAogICAgLy8gZXhwZWN0ZWQgc3VjY2Vzc2VkCiAgICBjb25zdCBjaGFyICpnb29kW10gPQogICAgewogICAgICAgICInYSciLAogICAgICAgICInXFwwJyIsCiAgICAgICAgIicwJyIsCiAgICAgICAgIidcXCciCiAgICB9OwogICAgZm9yIChpbnQgaT0wO2k8c2l6ZW9mKGdvb2QpL3NpemVvZihnb29kWzBdKTsrK2kpCiAgICB7CiAgICAgICAgaW50IG1hdGNoID0gcmVnZXhlYygmcmUsIGdvb2RbaV0sIDAsIE5VTEwsIDApOwogICAgICAgIHByaW50ZigiZ29vZDolZFxuIiwgbWF0Y2gpOwogICAgfQogICAgCiAgICBjb25zdCBjaGFyICpiYWRbXSA9CiAgICB7CiAgICAgICAgIidhYiciLAogICAgICAgICInYSIsCiAgICAgICAgIlxcIiwKICAgICAgICAiXFxcMCIsCiAgICAgICAgIlwwXFxcMCIKICAgIH07CiAgICBmb3IgKGludCBpPTA7aTxzaXplb2YoYmFkKS9zaXplb2YoYmFkWzBdKTsrK2kpCiAgICB7CiAgICAgICAgaW50IG1hdGNoID0gcmVnZXhlYygmcmUsIGJhZFtpXSwgMCwgTlVMTCwgMCk7CiAgICAgICAgcHJpbnRmKCJiYWQ6JWRcbiIsIG1hdGNoKTsKICAgIH0KICAgIAogICAgcmVnZnJlZSgmcmUpOwogICAgcmV0dXJuIDA7Cn0=