Jeśli zmuszony do POSIX tylko (no pcre), oto smakołyk upadku z powrotem:
#include <regex.h>
#include <stdbool.h>
bool reg_matches(const char *str, const char *pattern)
{
regex_t re;
int ret;
if (regcomp(&re, pattern, REG_EXTENDED) != 0)
return false;
ret = regexec(&re, str, (size_t) 0, NULL, 0);
regfree(&re);
if (ret == 0)
return true;
return false;
}
Można to nazwać tak:
int main(void)
{
static const char *pattern = "/foo/[0-9]+$";
/* Going to return 1 always, since pattern wants the last part of the
* path to be an unsigned integer */
if (! reg_matches("/foo/abc", pattern))
return 1;
return 0;
}
I wysoce zalecamy wykorzystanie PCRE jeśli jego dostępny. Ale miło jest to sprawdzić i trochę się wycofać.
Wyciągnąłem fragmenty z projektu aktualnie w moim edytorze. Jest to bardzo prosty przykład, ale daje ci typy i funkcje do wyszukiwania, jeśli ich potrzebujesz. Ta odpowiedź w mniejszym lub większym stopniu wzmacnia odpowiedź Sinana.
+1, choć POSIX istnieje, pcre jest dostępny na prawie wszystkich nowoczesnych systemach. –
Dzięki! Daje mi dobry punkt wyjścia. – jeffkolez
To jest dobra, przydatna i wspólna odpowiedź. Mam nadzieję, że to pytanie otrzyma więcej głosów, ponieważ regex w C może być trudny w zależności od platformy. –