每次我输入错误的文件名时,它都会导致正则表达式不匹配。我在哪里做错了是正则表达式还是其他东西。为什么 r 总是匹配 REG_NOMATCH
char fname[128], rlpath[PATH_MAX-1];
int r;
regex_t regex;
struct stat buf;
printf("Enter filename: ");
scanf("%s", fname);
if(fname == NULL){
printf("please enter the filename");
}
else {
if(realpath(fname,rlpath)!=NULL){
printf("The path for source file is %s \n", rlpath);
}
}
r = regcomp(®ex, "/^[a-zA-Z0-9/-/._/]+$/", REG_EXTENDED|REG_NOSUB);
r = regexec(®ex, fname, 0, NULL, 0);
if(r)
{
if(realpath(fname,rlpath)!= NULL)
{
if(sizeof(rlpath) < strlen(rlpath)){ //to check max rlpath length
printf("File name entered is too long");
exit(1);
}
stat(rlpath, &buf);//to examine the attributes of file, I used the stat function
if(S_ISREG(buf.st_mode))
{
printf("real path %s \n", rlpath);
printf("File Name is legit \n");
}
else{
printf("File name is not legit, it may be a device name, please check \n");
exit(1);
}
}
}
else if(r == REG_NOMATCH)
printf("Regular expression mismatch\n");
return 0;