fnmatch函数用法详解
fnmatch函数简介
- 头文件包含
#include <fnmatch.h>
- 函数定义
int fnmatch(const char * pattern , const char * string , int flags );
fnmatch函数常见使用错误
- 编译错误
warning: implicit declaration of function ‘fnmatch’ [-Wimplicit-function-declaration]
解决办法:包含头文件
#include <fnmatch.h>
fnmatch函数详细描述
fnmatch ()函数检查string参数是否与pattern参数匹配,这是一个shell通配符模式(请参见glob (7))
flags参数修改行为;它是以下零个或多个标志的按位或:
- FNM_NOESCAPE 如果设置了此标志,则将反斜杠视为普通字符,而不是转义字符。
- FNM_PATHNAME 如果设置了此标志,则只将string中的斜杠与pattern中的斜杠匹配,而不使用星号(*)或问号(?)元字符,也不使用包含斜杠的括号表达式([])。
- FNM_PERIOD 如果设置了这个标志,则string中的前导句点必须与pattern 中的句点完全匹配。如果句点是string 中的第一个字符,或者如果两个 FNM_PATHNAME 都设置了,并且句点紧随斜线后面,则该句点被认为是前导句点。
- FNM_FILE_NAME 这是FNM_PATHNAME 的GNU同义词
- 如果设置了这个标志(一个GNU扩展),则如果模式匹配string的初始段(后跟一个斜杠),则该模式被认为是匹配的。此标志主要用于glibc的内部使用,并且只在某些情况下实现。
- FNM_CASEFOLD 如果设置了这个标志(一个GNU扩展),模式将不区分大小写地匹配。
- FNM_EXTMATCH 如果设置了这个标志(一个GNU扩展),就支持扩展模式,正如&'ksh'所介绍的,现在其他shell也支持扩展模式。扩展格式如下,\fipatter-list\fr是一个&'分开的模式列表。
- &'?(\fipatter-list\fr)'如果\fipatter-list\fr中的任何模式中有零个或一个匹配输入\fistring\fr,则该模式匹配。
- &'*(\fipatter-list\fr)'如果\fipatter-list\fr中有零个或多个模式与输入\fistring\fr匹配,则该模式匹配。
- &'+(\fipatter-list\fr)'如果\fipatter-list\fr中出现的任何一个或多个模式与输入\fistring\fr匹配,则该模式匹配。
- &'@(\fipatter-list\fr)'如果\fipatter-list\fr中的任何一个模式恰好有一个匹配输入\fistring\fr,则该模式匹配。
- &'!(\fipatter-list\fr)'如果输入\fistring\fr不能与\fipatter-list\fr中的任何模式匹配,则该模式将匹配。
fnmatch函数返回值
如果string匹配pattern ,则为零;如果没有匹配,则为 FNM_NOMATCH ,或者如果有错误,则为另一个非零值。
评论区