是否有一种方法仅对斜杠的第一个实例应用fnmatch的FNM_PATHNAME标志?

问题描述 投票:-1回答:1

[嗨,我正在尝试提出一种使用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功能。请帮忙。

c++ c glob wildcard-mapping fnmatch
1个回答
0
投票

[不,没有一种方法可以直接用fnmatch执行此操作,但是您可以将模式在第一个/处一分为二,然后将所有候选字符串同样在它们的第一个/处进行拆分,然后进行匹配第一部分和第二部分分开。

© www.soinside.com 2019 - 2024. All rights reserved.