#include <stdio.h>
#include <regex.h>
int main(void) {
const char *regular_expression_pattern_keyword = "^(auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while)";
const char *regular_expression_pattern_identifier = "^[[:alpha:]]{1,}";
const char *regular_expression_pattern_number = "^[[:digit:]]+(\\W|$)";
const char *regular_expression_pattern_punctuator = "^[[:punct:]]";
const char *patterns[] = {
regular_expression_pattern_keyword,
regular_expression_pattern_identifier,
regular_expression_pattern_number,
regular_expression_pattern_punctuator
};
for (int i = 0; i < 4; i++)
{
regex_t regular_expression;
int status;
status = regcomp(®ular_expression, patterns[i], REG_EXTENDED);
if (status)
{
// FIXME: Improve error handling!
printf("Error: Failed to compile regex!\n"); }
status = regexec(®ular_expression, "12 abc", 0, NULL, 0);
if (!status)
{
printf("Regex status: Match ->%s\n", patterns
[i
]); }
else if (status == REG_NOMATCH)
{
printf("Regex status: No match\n"); }
else
{
// FIXME: Improve error handling!
printf("Error: Failed to match regex!\n"); }
regfree(®ular_expression);
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxyZWdleC5oPgoKaW50IG1haW4odm9pZCkgewoKCmNvbnN0IGNoYXIgKnJlZ3VsYXJfZXhwcmVzc2lvbl9wYXR0ZXJuX2tleXdvcmQgPSAiXihhdXRvfGJyZWFrfGNhc2V8Y2hhcnxjb25zdHxjb250aW51ZXxkZWZhdWx0fGRvfGRvdWJsZXxlbHNlfGVudW18ZXh0ZXJufGZsb2F0fGZvcnxnb3RvfGlmfGludHxsb25nfHJlZ2lzdGVyfHJldHVybnxzaG9ydHxzaWduZWR8c2l6ZW9mfHN0YXRpY3xzdHJ1Y3R8c3dpdGNofHR5cGVkZWZ8dW5pb258dW5zaWduZWR8dm9pZHx2b2xhdGlsZXx3aGlsZSkiOwpjb25zdCBjaGFyICpyZWd1bGFyX2V4cHJlc3Npb25fcGF0dGVybl9pZGVudGlmaWVyID0gIl5bWzphbHBoYTpdXXsxLH0iOwpjb25zdCBjaGFyICpyZWd1bGFyX2V4cHJlc3Npb25fcGF0dGVybl9udW1iZXIgPSAiXltbOmRpZ2l0Ol1dKyhcXFd8JCkiOwpjb25zdCBjaGFyICpyZWd1bGFyX2V4cHJlc3Npb25fcGF0dGVybl9wdW5jdHVhdG9yID0gIl5bWzpwdW5jdDpdXSI7Cgpjb25zdCBjaGFyICpwYXR0ZXJuc1tdID0gewogICAgcmVndWxhcl9leHByZXNzaW9uX3BhdHRlcm5fa2V5d29yZCwKICAgIHJlZ3VsYXJfZXhwcmVzc2lvbl9wYXR0ZXJuX2lkZW50aWZpZXIsCiAgICByZWd1bGFyX2V4cHJlc3Npb25fcGF0dGVybl9udW1iZXIsCiAgICByZWd1bGFyX2V4cHJlc3Npb25fcGF0dGVybl9wdW5jdHVhdG9yCn07Cgpmb3IgKGludCBpID0gMDsgaSA8IDQ7IGkrKykKewogICAgcmVnZXhfdCByZWd1bGFyX2V4cHJlc3Npb247CiAgICBpbnQgc3RhdHVzOwoKICAgIHN0YXR1cyA9IHJlZ2NvbXAoJnJlZ3VsYXJfZXhwcmVzc2lvbiwgcGF0dGVybnNbaV0sIFJFR19FWFRFTkRFRCk7CgogICAgaWYgKHN0YXR1cykKICAgIHsKICAgICAgICAvLyBGSVhNRTogSW1wcm92ZSBlcnJvciBoYW5kbGluZyEKICAgICAgICBwcmludGYoIkVycm9yOiBGYWlsZWQgdG8gY29tcGlsZSByZWdleCFcbiIpOwogICAgICAgIGV4aXQoMSk7CiAgICB9CgogICAgc3RhdHVzID0gcmVnZXhlYygmcmVndWxhcl9leHByZXNzaW9uLCAiMTIgYWJjIiwgMCwgTlVMTCwgMCk7CgogICAgaWYgKCFzdGF0dXMpCiAgICB7CiAgICAgICAgcHJpbnRmKCJSZWdleCBzdGF0dXM6IE1hdGNoIC0+JXNcbiIsIHBhdHRlcm5zW2ldKTsKICAgIH0KCiAgICBlbHNlIGlmIChzdGF0dXMgPT0gUkVHX05PTUFUQ0gpCiAgICB7CiAgICAgICAgcHJpbnRmKCJSZWdleCBzdGF0dXM6IE5vIG1hdGNoXG4iKTsKICAgIH0KCiAgICBlbHNlCiAgICB7CiAgICAgICAgLy8gRklYTUU6IEltcHJvdmUgZXJyb3IgaGFuZGxpbmchCiAgICAgICAgcHJpbnRmKCJFcnJvcjogRmFpbGVkIHRvIG1hdGNoIHJlZ2V4IVxuIik7CiAgICAgICAgZXhpdCgxKTsKICAgIH0KCiAgICByZWdmcmVlKCZyZWd1bGFyX2V4cHJlc3Npb24pOwp9CgoJcmV0dXJuIDA7Cn0K