0
私は、特定のパターンのテキストファイルを検索してレポートを生成するための宿題のコードを作成しています。現在はテストするために、レポートを画面に表示しています。しかし、私の検索機能は初めてのようだ。私は正規表現を個別にテストしましたが、それらはすべて正しいマッチを引っ張りますが、一度関数内に置けば、初めて実行されるときにのみ機能します。誰が私になぜこれが起こっているのか説明できますか?ファイルの末尾を指すfp
になります私の正規表現関数は初めて実行されるのはなぜですか?
#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);
}
これはうまくいきました。本当に感謝しています。 –