ATPathSpec 1.2.0

ATPathSpec 1.2.0

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
发布最后发布2015年9月

Andrey Tarantsov维护。



  • 作者:
  • Andrey Tarantsov

Objective-C的路径匹配库。

  • 使用灵活的可配置语法,每个语法特征都可以通过标志启用/禁用。
  • 使用Xcode 5的XCUnit框架进行测试。
  • 需要ARC。
  • MIT许可。

概述

#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.txt
  • 使用换行符、逗号和/或空格分隔多个模式,带有如下的gitignore语义(ATPathSpecSyntaxOptionsAllowNewlineSeparatorATPathSpecSyntaxOptionsAllowCommaSeparatorATPathSpecSyntaxOptionsAllowWhitespaceSeparator):*.txt, *.html, !*READ*, README.txt
  • 使用管道作为几个规范集的并集(《ATPathSpecSyntaxOptionsAllowPipeUnion)):*.txt | *.html | (*.xml & !*build*)
  • 使用与号表示几个模式的交集(《ATPathSpecSyntaxOptionsAllowAmpersandIntersection)):*.txt & !*READ*
  • 使用圆括号来分组子规范(《ATPathSpecSyntaxOptionsAllowParen)):foo & (bar | boz)
  • 使用感叹号来否定表达式(《ATPathSpecSyntaxOptionsAllowBangNegation)):*.txt & !README.*
  • 行注释以(未转义的)hash mark开头(《ATPathSpecSyntaxOptionsAllowHashComment)):*.html # HTML files
  • 使用 foo/ 来仅匹配文件夹(不可配置)。
  • 使用 foo 来仅匹配文件(如果 `ATPathSpecSyntaxOptionsRequireTrailingSlashForFolders 被指定)或匹配文件和文件夹(如果该标志未指定)
  • 如果规范中没有斜杠字符(除可能的尾斜杠外)并且 `ATPathSpecSyntaxOptionsMatchesAnyFolderWhenNoPathSpecified` 标志被设置,则模式匹配在任何子文件夹中(类似于gitignore);否则,如果没有设置此标志,此类模式仅在根文件夹中匹配。
  • 文件夹规范隐式包含匹配文件夹子树下的任何文件和文件夹(《ATPathSpecSyntaxOptionsFolderMatchesAllFilesInSubtree)),因此,如.git/ | .svn/之类的规范将匹配.git/foo/bar

gitignore列表语义

当您使用换行符、逗号或空格分隔符与感叹号否定一起使用时,生成的规范遵循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兼容的版本不同,扩展模式将在库中添加新功能时累积功能。

API

请参阅ATPathSpec/ATPathSpec.h

许可证

MIT许可证;请参阅LICENSE文件。