Я пытаюсь отфильтровать массив путей к файлам формата [число]_[число].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];
MATCHES
— это то, что вы ищете в этом сценарии. Я отредактировал свой ответ - пожалуйста, проверьте отредактированный код в конце. Я также добавил еще одно возможное объяснение. 02.03.2013