有没有一种方法可以只对斜杠的第一个实例应用fnmatch的FNM_PATHNAME标志

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

本文关键字:实例 第一个 应用 fnmatch 标志 PATHNAME FNM 一种 方法 有没有      更新时间:2023-10-16

嗨,我正试图想出一种方法,使用特定规则的fnmatch执行通配符屏蔽。

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

所需结果的E.g:

字符串a/b/c应使用/进行匹配。即匹配"b"之后的第二个"/",但不匹配"a"之后的第一个斜线。

字符串:a/b/c模式:/

结果:字符串:a/b/c模式:*

结果:我已经使用fnmatch 尝试了以下代码部分

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

->如果我需要将字符串中的每个"/"映射到模式中的"/",则使用FNM_PATHNAME标志的上述代码可以成功工作。但如果我需要把它限制在第一个实例的话,就不是这样了。

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

不,没有办法直接用fnmatch来实现这一点,但您可以在第一个/将模式一分为二,然后在第一个/同样地拆分所有候选字符串,并分别匹配第一部分和第二部分。