[嗨,我正在尝试提出一种使用fnmatch和某些规则来执行通配符屏蔽的方法。
在字符串中找到斜杠“ /”的第一个实例时,它必须与模式中的斜杠(“ /”)完全匹配。即通配符('*')将无法匹配。但是,输入字符串中的后续斜杠可以使用通配符进行匹配。
例如,期望的结果:
字符串a / b / c应该使用/进行匹配。即匹配'b'之后的第二个'/',但不匹配'a'之后的第一个斜杠。
string: a / b / c pattern: / Result:匹配。因为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
执行此操作,但是您可以将模式在第一个/
处一分为二,然后将所有候选字符串同样在它们的第一个/
处进行拆分,然后进行匹配第一部分和第二部分分开。