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

时间:2019-10-13 19:22:25

标签: c++ c glob wildcard-mapping fnmatch

嗨,我正在尝试提出一种使用fnmatch和某些规则执行通配符屏蔽的方法。

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

例如,获得所需结果:

字符串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功能。请帮忙。

1 个答案:

答案 0 :(得分:1)

否,没有一种方法可以直接通过fnmatch来执行此操作,但是您可以在前一个/处将模式一分为二,然后在其第一个{ {1}},并分别匹配第一部分和第二部分。