Objective-C的路径匹配库。
概述
#import "ATPathSpec.h"
ATPathSpec *spec = [ATPathSpec pathSpecWithString:@"docs/*.txt" syntaxOptions:ATPathSpecSyntaxFlavorExtended];
BOOL matched = [spec matchesPath:@"docs/README.txt" type:ATPathSpecEntryTypeFile];
语法风味
ATPathSpecSyntaxFlavorLiteral:字面字符串(没有特殊字符)ATPathSpecSyntaxFlavorGlob:shell样式glob,支持 *和 ?通配符ATPathSpecSyntaxFlavorGitignore:100%与 .gitignore 兼容ATPathSpecSyntaxFlavorExtended:启用所有ATPathSpec功能;请注意,它与gitignore不完全兼容,因为它设置了 ATPathSpecSyntaxOptionsRequireTrailingSlashForFolders 标志语法特性(通过语法风味或单独的特性标志启用)
* 表示任意数量的文件名字符(ATPathSpecSyntaxOptionsAllowStarWildcard)? 表示恰好一个文件名字符(ATPathSpecSyntaxOptionsAllowQuestionMarkWildcard)ATPathSpecSyntaxOptionsAllowBackslashEscape):\!important.txtATPathSpecSyntaxOptionsAllowNewlineSeparator,ATPathSpecSyntaxOptionsAllowCommaSeparator,ATPathSpecSyntaxOptionsAllowWhitespaceSeparator):*.txt, *.html, !*READ*, README.txt*.txt | *.html | (*.xml & !*build*)*.txt & !*READ*foo & (bar | boz)*.txt & !README.**.html # HTML filesfoo/ 来仅匹配文件夹(不可配置)。foo 来仅匹配文件(如果 `ATPathSpecSyntaxOptionsRequireTrailingSlashForFolders 被指定)或匹配文件和文件夹(如果该标志未指定)ATPathSpecSyntaxOptionsMatchesAnyFolderWhenNoPathSpecified` 标志被设置,则模式匹配在任何子文件夹中(类似于gitignore);否则,如果没有设置此标志,此类模式仅在根文件夹中匹配。.git/ | .svn/之类的规范将匹配.git/foo/bar。当您使用换行符、逗号或空格分隔符与感叹号否定一起使用时,生成的规范遵循gitignore的语义,可以概括为“最后一个匹配的条目获胜”。也就是说:
*.txt
*.html
!*READ*
README.txt
匹配任何文本或HTML文件,除了包含READ字样但可以匹配到README.txt。
在内部,这样的列表会转换为:
((*.txt | *.html) & !*READ*) | README.txt
这就是您在调用返回路径规范对象上的description方法时将会得到的结果。
这适用于换行符分隔、逗号分隔和空格分隔的列表。
没有运算符优先级;如果没有括号,您不能在同一个表达式中混合不同的运算符。
(我非常希望自动将换行符分隔的表达式包裹在括号中,这样换行符就是唯一具有更低优先级的运算符,但我还没有做到这一点。目前,您不能将换行符、逗号和空格分隔符与其他任何运算符混合使用。)
扩展模式启用了所有语法功能,因此您可以编写以下内容:
(*.txt *.html *README* !docs/*.txt) & !(~* | *.tmp)
请记住,扩展模式启用了ATPathSpecSyntaxOptionsRequireTrailingSlashForFolders,所以.git不会匹配git子文件夹,您需要使用.git/。
与其他力求与现有API兼容的版本不同,扩展模式将在库中添加新功能时累积功能。
MIT许可证;请参阅LICENSE文件。