Ich arbeite an etwas Code für eine Hausaufgabe, die eine Textdatei für bestimmte Muster suchen und Berichte erstellen soll. Um es zu testen, drucke ich gerade meine Berichte auf dem Bildschirm. Aber meine Suchfunktion scheint nur das erste Mal zu laufen. Ich habe die Regex einzeln getestet und sie ziehen alle die richtigen Übereinstimmungen, aber sobald ich sie in die Funktion einfüge, funktioniert sie nur beim ersten Mal. Kann mir jemand erklären, warum das passiert?Warum läuft meine Regex-Funktion nur beim ersten Mal?
#include <stdio.h>
#include <stdlib.h>
#include <regex.h>
// Report expressions
char *reports[5] = {"^ {0,}[0-9]{1,4}", "S", "L", "S {0,1}(1|2)", "^ {0,}[0-9]{1,4} {1,} L | 3$"};
void search(FILE *fp, char *report, int index) {
regex_t reg;
char buf[256];
int reti = regcomp(®,report,REG_EXTENDED);
if(reti) {
printf("Regex compilation failed, noob\n");
exit(1);
}
printf("Report %d\n", index);
while(fgets(buf,sizeof(buf),fp) != NULL) {
//printf("%s",buf);
reti = regexec(®,buf,0,NULL,0);
if(!reti) { //if there's a match
printf("%s",buf);
} else if(reti == REG_NOMATCH) {
printf("No match\n");
}
}
regfree(®);
}
int main(void) {
FILE *fp;
fp = fopen("./Hammer.data","r");
if(fp == NULL) {
perror("Error opening file");
return(-1);
}
for(int i = 0;i < 5;i++) {
search(fp, reports[i],i+1);
}
fclose(fp);
return(0);
}
Das hat funktioniert, ich danke Ihnen sehr, ich schätze es sehr! –