#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <regex.h>
typedef struct { char str[1000]; } regex;
long regexmatch(const char* str,
const char* regexs,
size_t nummatch,
regex rp[nummatch]);
void printres(regex reg[]);
int main(void) {
regex
* r
=calloc(10, sizeof *r
); if (regexmatch("T/2/b", "([A-Z]+)/([0-9]+)/([a-z]+)", 10, r)==0){
printres(r);
}
return 0;
}
long regexmatch(const char* str,
const char* regexs,
size_t nummatch,
regex reg[nummatch]){
regex_t r;regmatch_t match[nummatch];
if (regcomp(&r,regexs,REG_EXTENDED) != 0){return -1;}
if (regexec(&r,str,nummatch,match,0)!=0){regfree(&r);return -1;}
regfree(&r);
size_t i=0;
for (i=0;i<nummatch;i++){
if (match[i].rm_so > -1){
unsigned long sz=match[i].rm_eo-match[i].rm_so;
if (sz > 0 && sz < 1000){
memcpy(reg
->str
, (char*)(str
+match
[i
].
rm_so), sz
); reg++; /* This should be outside the if statement */
}
}
}
return 0;
}
void printres(regex reg[]){
while (reg->str[0] != '\0'){
reg++;
}
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHN0cmluZy5oPgojaW5jbHVkZSA8cmVnZXguaD4KCnR5cGVkZWYgc3RydWN0IHsgY2hhciBzdHJbMTAwMF07IH0gcmVnZXg7Cgpsb25nIHJlZ2V4bWF0Y2goY29uc3QgY2hhciogc3RyLAogICAgICAgICAgICAgICAgY29uc3QgY2hhciogcmVnZXhzLAogICAgICAgICAgICAgICAgc2l6ZV90IG51bW1hdGNoLAogICAgICAgICAgICAgICAgcmVnZXggcnBbbnVtbWF0Y2hdKTsKdm9pZCBwcmludHJlcyhyZWdleCByZWdbXSk7CiAgICAgICAgICAgICAgICAgICAgCmludCBtYWluKHZvaWQpIHsKICAgIHJlZ2V4KiByPWNhbGxvYygxMCwgc2l6ZW9mICpyKTsKICAgIGlmIChyZWdleG1hdGNoKCJULzIvYiIsICIoW0EtWl0rKS8oWzAtOV0rKS8oW2Etel0rKSIsIDEwLCByKT09MCl7CiAgICAJcHJpbnRyZXMocik7CiAgICB9CiAgICBmcmVlKHIpOwogICAgcmV0dXJuIDA7Cn0KCmxvbmcgcmVnZXhtYXRjaChjb25zdCBjaGFyKiBzdHIsCiAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiByZWdleHMsCiAgICAgICAgICAgICAgICBzaXplX3QgbnVtbWF0Y2gsCiAgICAgICAgICAgICAgICByZWdleCByZWdbbnVtbWF0Y2hdKXsKICAgIHJlZ2V4X3QgcjtyZWdtYXRjaF90IG1hdGNoW251bW1hdGNoXTsKICAgIGlmIChyZWdjb21wKCZyLHJlZ2V4cyxSRUdfRVhURU5ERUQpICE9IDApe3JldHVybiAtMTt9CiAgICBpZiAocmVnZXhlYygmcixzdHIsbnVtbWF0Y2gsbWF0Y2gsMCkhPTApe3JlZ2ZyZWUoJnIpO3JldHVybiAtMTt9CiAgICByZWdmcmVlKCZyKTsKICAgIHNpemVfdCBpPTA7CiAgICBmb3IgKGk9MDtpPG51bW1hdGNoO2krKyl7CiAgICAgICAgaWYgKG1hdGNoW2ldLnJtX3NvID4gLTEpewogICAgICAgICAgICB1bnNpZ25lZCBsb25nIHN6PW1hdGNoW2ldLnJtX2VvLW1hdGNoW2ldLnJtX3NvOwogICAgICAgICAgICBpZiAoc3ogPiAwICYmIHN6IDwgMTAwMCl7CiAgICAgICAgICAgIG1lbWNweShyZWctPnN0ciwgKGNoYXIqKShzdHIrbWF0Y2hbaV0ucm1fc28pLCBzeik7CiAgICAgICAgICAgIHJlZysrOyAgLyogVGhpcyBzaG91bGQgYmUgb3V0c2lkZSB0aGUgaWYgc3RhdGVtZW50ICovCiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gMDsKfQoKdm9pZCBwcmludHJlcyhyZWdleCByZWdbXSl7CiAgICBwcmludGYoIk1hdGNoZXNcbiIpOwogICAgd2hpbGUgKHJlZy0+c3RyWzBdICE9ICdcMCcpewogICAgCXByaW50ZigiJXNcbiIscmVnLT5zdHIpOwogICAgCXJlZysrOwogICAgfQp9