Wenn nur in POSIX gezwungen (kein PCRE), hier ist ein Leckerbissen des Falles zurück:
#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;
}
Sie könnten es nennen dies wie:
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 sehr empfehlen Verwendung von PCRE, wenn seine zur Verfügung stellen. Aber es ist nett, nach etwas zu suchen und irgendwie zurückzufallen.
Ich zog die Snippets aus einem Projekt in meinem Editor. Es ist nur ein sehr einfaches Beispiel, aber gibt Ihnen Arten und Funktionen zu suchen, wenn Sie sie brauchen. Diese Antwort verstärkt Sinans Antwort mehr oder weniger.
+1, obwohl POSIX nicht vorhanden ist, ist pcre auf fast allen modernen Systemen zur Verfügung. –
Danke! Gibt mir einen schönen Ausgangspunkt. – jeffkolez
Dies ist eine nette, nützliche und kooperative Antwort. Ich hoffe, dass diese Frage mehr Stimmen bekommt, da Regex in C je nach Plattform knifflig sein kann. –