-1

嗨,我正在尝试使用具有某些规则的 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 功能。请帮忙。

4

1 回答 1

1

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

于 2019-10-13T21:19:50.140 回答