Salve, mi è stato assegnato un laboratorio, di cui allego di seguito il testo:
Una espressione regolare (o regexp) è una sequenza di simboli (quindi una stringa) che identifica un
insieme di stringhe. Si scriva una funzione in C in grado di individuare (cercare) eventuali occorrenze di
una data regexp all'interno di una stringa di input.
La funzione sia caratterizzata dal seguente prototipo:
char *cercaRegexp(char *src, char *regexp);
dove :
? il parametro src rappresenta la stringa sorgente in cui cercare.
? il parametro regexp rappresenta l'espressione regolare da cercare.
? il valore di ritorno della funzione è un puntatore alla prima occorrenza di regexp in src (NULL
se non trovata).
Ai fini dell'esercizio si consideri di valutare solamente stringhe composte da caratteri alfabetici. Si
considerino inoltre solamente espressioni regolari composte da caratteri alfabetici e dai seguenti
metacaratteri:
? . trova un singolo carattere (cioè qualunque carattere può corrispondere a un punto)
? [] trova un singolo carattere contenuto nelle parentesi (cioè uno qualsiasi dei caratteri tra parentesi
va bene)
? [^ ] trova ogni singolo carattere non contenuto nelle parentesi (cioè tutti i caratteri tra parentesi
non vanno bene)
? \a trova un carattere minuscolo
? \A trova un carattere maiuscolo
Esempi di espressioni regolari:
.oto corrisponde a ogni stringa di quattro caratteri terminante con “oto”, es. "voto", "noto",
"foto", ...
[mn]oto rappresenta solamente "moto" e "noto"
[^f]oto rappresenta tutte le stringhe terminanti in “oto” ad eccezione di "foto"
\aoto rappresenta ogni stringa di quattro caratteri (come "voto", "noto", "foto", ... ) iniziante per
lettere minuscola e terminante in “oto”
\Aoto rappresenta ogni stringa di quattro caratteri (come "Voto", "Noto", "Foto", ...) iniziante per
lettere maiuscola e terminante in “oto”.
Ho cercato di risolverlo con dei costrutti if-else e poi la strstr, ma la funzione mi ritorna sempre NULL. Sto letteralmente impazzendo!
Metto come esempio l'if dell'occorenza '.'
char *cercaRegexp(char *src, char *regexp) {
char *ris;
while (*regexp != '\0') {
if (*regexp == '.') {
while(*src!='\0'){
if(*(regexp+1)==*src){
printf("%c", *(src-1));
return strstr(src,regexp);
}
src++;
}
} else if (*regexp == '[') {
} else if (*regexp == '[' && *(regexp + 1) == '^') {
} else if (*regexp == '\\') {
}
}
regexp++;
return ris;
}