gpt4 book ai didi

C正则表达式验证文件夹下的文件名

转载 作者:太空宇宙 更新时间:2023-11-04 02:26:52 24 4
gpt4 key购买 nike

我不熟悉 C 中的正则表达式,我正在尝试使用 regex.h 库查找给定文件名是否在使用正则表达式的文件夹下。这是我尝试过的:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <regex.h>

int checkregex(char regex_str[100], char test[100]) {
regex_t regex;
printf("regex_str: %s\n\n", regex_str);
int reti = regcomp(&regex, regex_str, REG_EXTENDED | REG_ICASE);
if (reti) {
fprintf(stderr, "Could not compile regex\n");
exit(1);
}
reti = regexec(&regex, test, 0, NULL, REG_EXTENDED | REG_ICASE);
regfree(&regex);
return reti;
}

void main(int argc, char *argv[]) {
const char *safepath = "/home";
size_t spl = strlen(safepath);

char *fn = argv[1];

int noDoubleDots = checkregex("[^..\\/]", fn);
int allowedChars = checkregex("^[[:alnum:]\\/._ -]*$", fn);
int backslashWithSpace = checkregex(".*(\\ ).*", fn);

puts("noDoubleDots");
puts((noDoubleDots == 0 ? "Match\n" : "No Match\n"));
puts("allowedChars");
puts((allowedChars == 0 ? "Match\n" : "No Match\n"));
puts("backslashWithSpace");
puts((backslashWithSpace == 0 ? "Match\n" : "No Match\n"));

return;
}

我的第一次尝试只是不匹配如果它包含 ..(我什至无法做到)与 noDubleDots。但是后来测试发现文件名和文件夹名可以有..,比如folder..name/。所以我想排除那些带有 /..../ 的。但是,如果文件夹名称类似于 folder .. 并且其中有另一个名为 folder2/ 的文件夹,则路径将为 folder\../folder2 并排除 ../ 会导致错误的输出。

在代码中,allowedChars 工作正常。我想如果我也检查文件名是否有 .., \..\([:alnum:])* 到验证文件路径,它会完成。但是我的正则表达式似乎不起作用。例如,backslashWithSpace 匹配 asd/asd\/

如何使用正则表达式检查并确保给定路径位于文件夹下?提前致谢。

最佳答案

POSIX 提供了一个很好的功能 realpath()

realpath() expands all symbolic links and resolves references to /./, /../ and extra '/' characters in the null-terminated string named by path to produce a canonicalized absolute pathname. The resulting pathname is stored as a null-terminated string, up to a maximum of PATH_MAX bytes, in the buffer pointed to by resolved_path. The resulting path will have no symbolic link, /./ or /../ components.

如果你能使用它,我认为它能满足你的需要,如果不能,也许你可以复制源代码。

关于C正则表达式验证文件夹下的文件名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49840529/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com