Se costretti in POSIX solo (senza PCRE), ecco un bocconcino di ripiego:
#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;
}
si potrebbe chiamare in questo modo:
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;
}
ho altamente consiglio di fare uso di PCRE se disponibili. Ma è bello controllarlo e avere una sorta di ripiego.
Ho estratto i frammenti da un progetto attualmente nel mio editor. È solo un esempio di base, ma offre tipi e funzioni per cercare se ne hai bisogno. Questa risposta più o meno aumenta la risposta di Sinan.
fonte
2009-10-27 15:22:51
+1, anche se POSIX esiste, PCRE è disponibile su quasi tutti i sistemi moderni. –
Grazie! Mi dà un buon punto di partenza. – jeffkolez
Questa è una risposta piacevole, utile e collaborativa. Spero che questa domanda riceva voti più alti, dato che la regex in C può essere complicata a seconda della piattaforma. –