有没有办法只对第一个斜杠实例应用 fnmatch 的 FNM_PATHNAME 标志?

Is there a way to apply FNM_PATHNAME flag of fnmatch only for first instance of slash?

您好,我正在尝试想出一种方法来使用具有特定规则的 fnmatch 执行通配符屏蔽。

在字符串中找到斜线“/”的第一个实例时,它必须与模式中的斜线(“/”)完全匹配。即通配符 ('*') 将无法匹配。但是,可以使用通配符匹配输入字符串中的后续斜杠。

例如,对于期望的结果:

string a/b/c 应该使用 / 匹配。即匹配 'b' 之后的第二个 '/' 但不匹配 'a' 之后的第一个斜杠。

字符串: a/b/c 模式: / 结果: 匹配。因为在 str

中第一个 '/' 实例的模式中有一个显式的 '/'

字符串: a/b/c 模式: * 结果: 不匹配。因为 str

中 '/' 的第一个实例没有明确的 '/'

我已经使用 fnmatch 尝试了下面的代码部分

int match(char pat[], char str[])
{
   int rVal = fnmatch(pat, str, FNM_PATHNAME);
   return rVal;

}

-> 如果我需要将字符串中的每个“/”映射到模式中的“/”,则使用 FNM_PATHNAME 标志的上述代码可以成功运行。但如果我需要将其限制为仅一审,则不会。

-> 我可以使用 fnmatch 继续处理这个问题还是需要依赖任何其他 posix 功能。请帮忙。

不,没有办法直接使用 fnmatch 执行此操作,但您可以在第一个 / 处将模式一分为二,然后将所有候选字符串同样拆分为first/,分别匹配第一部分和第二部分。