FilePathPattern for iOS
基于正则表达式的iOS文件路径模式匹配器。
用途
FilePathPattern是一个匹配文件路径与模式的工具,并将匹配的部分提取到命名变量中。例如,模式**/{name}.txt
可以用于匹配任何具有.txt
扩展名的文件,并将文件名提取到名为name
的变量中;此模式将匹配以下任何文件路径
Desktop/notes.txt
/var/log/error.txt
/usr/share/vim/vim80/syntax/README.txt
安装
要使用CocoaPods进行安装,请将以下内容添加到Podfile中:pod 'FilePathPattern', '~> 0.1.2'
示例用法
导入头文件
#import "IFFilePathPattern.h"
测试路径字符串是否与模式匹配,并提取匹配变量
NSDictionary *matches = [IFFilePathPattern matchPath:@"images/fruit/orange.jpg"
usingPattern:@"images/{type}/{name}.(jpg|png)"];
if (matches) {
NSString *type = matches[@"type"]; // => 'fruit'
NSString *name = matches[@"name"]; // => 'orange'
}
模式语法
模式的语法是标准正则表达式语法和熟悉的文件通配符语法的结合。与标准正则表达式语法的具体区别如下:
- 句点(圆点)
.
被视为一个实际的.
字符,而不是字符通配符。 - 单个星号
*
被视为任何非反斜杠(/
)字符,而不是零个或多个量词。这使得匹配单个路径组件(例如*/*
)变得容易。 - 双星号
**
被视为任何字符,用于匹配深度嵌套路径很有用(例如**/file
)。 - 括号可以用来定义表达式组(例如
(a|b)
),但它们不是捕获的。 ?
和+
量词,以及交替(管道符号|
),与正常正则表达式中的用法一样(注意,这意味着?
与正常文件通配符中的用法不同)。- 使用
[]
或标准缩写如\w
或\s
的所有字符类都与正常正则表达式中的用法一样。 - 可以使用变量模式来捕获匹配路径中的数据。变量模式是花括号内的变量名,例如
{name}
。变量模式默认与*
模式匹配,但可以通过在变量名末尾添加冒号后跟替代模式来修改此行为,例如{name:aaa|bbb}
。 - 类似
a{2,5}
的量词可以工作,但不能用于变量模式中。
示例模式
- 从所有匹配的HTML文件中提取文件名:
**/{name}.html
。 - 从匹配的docx文件中提取一个带有可选日期前缀的标题:
docs/({id}-)?{title}.docx
。这将匹配类似docs/123-Guides.docx
或docs/Price List.docx
的文件。 - 匹配按日期存储的文本文件并提取日期字段:
logs/{year:\d+}-{month:\d+}-{day:\d+}.txt
。这将匹配类似logs/2016-03-17.txt
的文件。
限制
- 当与量词一起使用时,变量模式可能会产生意外的结果(或者根本无法工作),例如
{name}*
或
(({name}){1,2}}
。 - 无法保证模式能编译成一个有效的正则表达式;基本模式应该没问题,但复杂的模式可能会抛出异常。特别是,在变量模式内包含变量量词(如
{var:(abc){2,3}}
)很可能不起作用。
许可证
FilePathPattern在Apache 2.0 OSS许可证下发布。