Si forcé dans POSIX uniquement (pas PCRE), voici une friandise de repli:
#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;
}
Vous pourriez appeler comme ceci:
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;
}
Je très recommande de faire usage de PCRE si elle est disponible. Mais, c'est agréable de vérifier pour cela et avoir une sorte de repli.
J'ai extrait les extraits d'un projet actuellement dans mon éditeur. C'est juste un exemple très basique, mais vous donne des types et des fonctions à rechercher si vous en avez besoin. Cette réponse augmente plus ou moins la réponse de Sinan.
+1, bien que Posix existe, PCRE est disponible sur presque tous les systèmes modernes. –
Merci! Cela me donne un bon point de départ. – jeffkolez
Ceci est une réponse agréable, utile et coopérative. J'espère que cette question recevra plus de votes, car regex en C peut être difficile en fonction de la plate-forme. –