c#通配符匹配符合条件文件名

//value为待匹配的字符串,regex为正则表达式

public bool IsMatch(string value, string regex)
        {
            if (regex == "*" || value == regex) return true;
            if (value == "") return false;

            if (value[0] == regex[0] || regex[0] == '?') return IsMatch(value.Substring(1), regex.Substring(1));
            if (regex[0] == '*') return IsMatch(value.Substring(1), regex) || IsMatch(value, regex.Substring(1));
            return false;
        }
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在rt-thread中,可以通过使用通配符匹配文件名来搜索文件系统中的文件。具体实现方法如下: 1. 编写一个递归函数,遍历文件系统中的所有文件和目录。 2. 对于每个目录,递归调用该函数,直到找到匹配的文件。 3. 对于每个文件名,通过strcmp函数来比较文件名通配符,查看是否匹配。 4. 在匹配的情况下,记录下该文件的路径,同时继续搜索其他的文件和目录。 5. 最终得到所有匹配的文件路径,返回给调用者。 例如,可以使用以下代码实现通配符匹配: ```c /* 递归搜索文件系统中匹配的文件 */ int find_files(const char *path, const char *pattern, char file_list[][MAX_FILE_NAME_LEN], int *index){ struct dirent *dir; DIR *d = opendir(path); if(d){ while((dir = readdir(d)) != NULL){ /* 获取文件名 */ char filename[MAX_FILE_NAME_LEN]; strcpy(filename, dir->d_name); /* 忽略父目录和当前目录 */ if(strcmp(filename, "..") == 0 || strcmp(filename, ".") == 0) continue; char filepath[MAX_FILE_NAME_LEN]; snprintf(filepath, MAX_FILE_NAME_LEN, "%s/%s", path, filename); if(dir->d_type == DT_DIR){ /* 处理目录 */ find_files(filepath, pattern, file_list, index); }else{ /* 处理文件 */ if(match(pattern, filename)){ snprintf(file_list[*index], MAX_FILE_NAME_LEN, "%s/%s", path, filename); (*index)++; } } } closedir(d); } return 0; } /* 比较文件名通配符是否匹配 */ int match(const char *pattern, const char *filename){ if(!*pattern && !*filename) /* 如果pattern和filename都为空,则匹配 */ return 1; if(*pattern == '*' && *(pattern+1) != '\0' && !*filename) return 0; if(*pattern == '?' || *pattern == *filename) return match(pattern+1, filename+1); if(*pattern == '*') return match(pattern+1, filename) || match(pattern, filename+1); return 0; } ``` 该代码使用了递归方法来遍历文件系统中的所有文件和目录。对于每个文件名通配符,使用strcmp函数来进行比较。如果匹配,则记录下该文件的路径,并继续搜索其他的文件和目录。最终得到所有匹配的文件路径,返回给调用者。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值