有没有办法只对第一个斜杠实例应用 fnmatch 的 FNM_PATHNAME 标志?
Is there a way to apply FNM_PATHNAME flag of fnmatch only for first instance of slash?
您好,我正在尝试想出一种方法来使用具有特定规则的 fnmatch 执行通配符屏蔽。
在字符串中找到斜线“/”的第一个实例时,它必须与模式中的斜线(“/”)完全匹配。即通配符 ('*') 将无法匹配。但是,可以使用通配符匹配输入字符串中的后续斜杠。
例如,对于期望的结果:
string 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 功能。请帮忙。
不,没有办法直接使用 fnmatch
执行此操作,但您可以在第一个 /
处将模式一分为二,然后将所有候选字符串同样拆分为first/
,分别匹配第一部分和第二部分。
您好,我正在尝试想出一种方法来使用具有特定规则的 fnmatch 执行通配符屏蔽。
在字符串中找到斜线“/”的第一个实例时,它必须与模式中的斜线(“/”)完全匹配。即通配符 ('*') 将无法匹配。但是,可以使用通配符匹配输入字符串中的后续斜杠。
例如,对于期望的结果:
string 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 功能。请帮忙。
不,没有办法直接使用 fnmatch
执行此操作,但您可以在第一个 /
处将模式一分为二,然后将所有候选字符串同样拆分为first/
,分别匹配第一部分和第二部分。