【发布时间】:2013-03-02 12:23:52
【问题描述】:
我正在尝试过滤格式为 [number]_[number].png 的文件路径数组 并只获取以特定数字开头的数字,比如 1。
这是我尝试过的:
NSPredicate *predicate = [NSPredicate predicateWithFormat:
@"self MATCHES '%@/1_[0-9]+.png'",
[[[NSBundle mainBundle] resourcePath]
stringByAppendingPathComponent:@"Images"]];
NSArray *files = [[[NSBundle mainBundle] pathsForResourcesOfType:@"png"
inDirectory:@"Images"]
filteredArrayUsingPredicate:predicate];
我得到一个空数组。 我尝试使用 LIKE 而不是 MATCHES。我尝试使用 [cd] 标志,但它应该没关系。不过我总是得到一个空数组。 和正则表达式有关吗?
编辑:
问题似乎出在 predicateWithFormat 上。
我认为它得到一个格式字符串,后跟要替换为格式字符串的参数。它不是那样工作的。它会忽略参数,并且不会在格式字符串中替换任何内容。
所以解决方法如下:
NSPredicate *predicate = [NSPredicate predicateWithFormat:
[NSString stringWithFormat:
@"self MATCHES '%@/1_[0-9]+.png'",
[[[NSBundle mainBundle] resourcePath]
stringByAppendingPathComponent:@"Images"]]];
NSArray *files = [[[NSBundle mainBundle] pathsForResourcesOfType:@"png"
inDirectory:@"Images"]
filteredArrayUsingPredicate:predicate];
【问题讨论】:
标签: ios regex filtering nspredicate