#include <regex.h>
#include <stdio.h>
int checkregex(char *in){
regex_t regex;
char *expression="^M{0,4}(CM|CD|D?C{0,3})(XC|XL|L?X{0,3})(IX|IV|V?I{0,3})$";
int reti;
char msgbuf[100];
/* Compile regular expression */
reti = regcomp(®ex, expression, REG_EXTENDED);
if (reti) {
fprintf(stderr
, "Could not compile regex\n"); return -1;
}
/* Execute regular expression */
reti = regexec(®ex, in , 0, NULL, 0);
if (!reti) {
return 1;
}
else if (reti == REG_NOMATCH) {
return 0;
}
else {
regerror(reti, ®ex, msgbuf, sizeof(msgbuf));
fprintf(stderr
, "Regex match failed: %s\n", msgbuf
); }
return 0;
}
int main(void) {
int x = checkregex("XII");
return 0;
}
I2luY2x1ZGUgPHJlZ2V4Lmg+CiNpbmNsdWRlIDxzdGRpby5oPgoKaW50IGNoZWNrcmVnZXgoY2hhciAqaW4pewogIHJlZ2V4X3QgcmVnZXg7CiAgY2hhciAqZXhwcmVzc2lvbj0iXk17MCw0fShDTXxDRHxEP0N7MCwzfSkoWEN8WEx8TD9YezAsM30pKElYfElWfFY/SXswLDN9KSQiOwogIGludCByZXRpOwogIGNoYXIgbXNnYnVmWzEwMF07CgogIC8qIENvbXBpbGUgcmVndWxhciBleHByZXNzaW9uICovCiAgcmV0aSA9IHJlZ2NvbXAoJnJlZ2V4LCBleHByZXNzaW9uLCBSRUdfRVhURU5ERUQpOwogIGlmIChyZXRpKSB7CiAgICBmcHJpbnRmKHN0ZGVyciwgIkNvdWxkIG5vdCBjb21waWxlIHJlZ2V4XG4iKTsKICAgIHJldHVybiAtMTsKICB9CgogIC8qIEV4ZWN1dGUgcmVndWxhciBleHByZXNzaW9uICovCiAgcmV0aSA9IHJlZ2V4ZWMoJnJlZ2V4LCBpbiAsIDAsIE5VTEwsIDApOwogIGlmICghcmV0aSkgewogICAgcHJpbnRmKCJNYXRjaFxuIik7CiAgICByZXR1cm4gMTsKICB9CiAgZWxzZSBpZiAocmV0aSA9PSBSRUdfTk9NQVRDSCkgewogICAgcHJpbnRmKCJObyBtYXRjaFxuIik7CiAgICByZXR1cm4gMDsKICB9CiAgZWxzZSB7CiAgICByZWdlcnJvcihyZXRpLCAmcmVnZXgsIG1zZ2J1Ziwgc2l6ZW9mKG1zZ2J1ZikpOwogICAgZnByaW50ZihzdGRlcnIsICJSZWdleCBtYXRjaCBmYWlsZWQ6ICVzXG4iLCBtc2didWYpOwogICAgZXhpdCgxKTsKICB9CiAgcmV0dXJuIDA7Cn0KCmludCBtYWluKHZvaWQpIHsgCiAgICBpbnQgeCA9IGNoZWNrcmVnZXgoIlhJSSIpOwoJcHJpbnRmKCIlZFxuIiwgeCk7CglyZXR1cm4gMDsKfQ==