From: patrick-scho Date: Fri, 23 May 2025 11:40:28 +0000 (+0200) Subject: add regex.c X-Git-Url: https://gitweb.ps.run/onefile/commitdiff_plain/6f2e28e44c3d1552a12b4e3d92f9d4788d5aab09?ds=sidebyside add regex.c --- 6f2e28e44c3d1552a12b4e3d92f9d4788d5aab09 diff --git a/regex.c b/regex.c new file mode 100644 index 0000000..ca7a8f2 --- /dev/null +++ b/regex.c @@ -0,0 +1,49 @@ +int match(char r, char t) +{ + return r == '.' || r == t; +} +int matchstr(const char *r, const char *t) +{ + int state = 0, i = (r[0] == '^' ? 1 : 0), j = 0; + while (1) + { + if (r[i] == '\0') + return 1; + if (r[i] == '$' && r[i + 1] == '\0') + return t[j] == '\0'; + if (t[j] == '\0') + return 0; + + if (state == 0) // base case + { + if (r[i + 1] == '*') + state = 1; + else if (match(r[i], t[j])) + i++, j++; + else if (r[0] == '^') + return 0; + else + i = 0; + } + if (state == 1) // star + { + if (!match(r[i], t[j]) || match(r[i + 2], t[j])) + state = 0, i += 2; + else + j++; + } + } + return 0; +} + +#include + +int main(int argc, char **argv) +{ + if (argc != 3) + { + printf("Usage: %s \n", argv[0]); + return 2; + } + return !matchstr(argv[1], argv[2]); +}