NSP предикаты начинаются с - PullRequest
1 голос
/ 01 декабря 2010

У меня есть NSArray, содержимое которого представляет собой строки в формате, похожем на: [A-Z] {+} - [0-9] {+}

так что в основном это набор повторяющихся буквенных символов, разделитель, а затем 1 или более цифр, так что

Я хочу фильтровать по значениям в массиве, которые соответствуют разделителю, но я не могу явно указать его в формате моего предиктора:

NSPredicate *aPredicate = [NSPredicate predicateWithFormat:@"self BEGINSWITH %@", aValue];
NSArray *filtered = [entries filteredArrayUsingPredicate:aPredicate];

Как вы ограничиваете фильтрацию для такого случая?

Ответы [ 2 ]

1 голос
/ 02 декабря 2010

Вы можете использовать оператор «MATCHES» для поиска по регулярному выражению, например:

NSPredicate * p = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", @"[a-z]+-.*"];
NSArray * s = [NSArray arrayWithObject:@"abc-123"];
NSLog(@"%@", [s filteredArrayUsingPredicate:p]);

Однако есть предостережение.Регулярное выражение сопоставляется по всей строке.Поэтому, если вы хотите найти все элементы, начинающиеся с 3 букв, ваше выражение не может быть просто «[az] {3}».Это должно быть "[az] {3}. *".Первое не удастся для всего, что не 3 буквы, в то время как второе будет соответствовать всему, что по крайней мере 3 буквы.

Мне потребовалось время, чтобы понять это ...

0 голосов
/ 01 декабря 2010

Возможно, вы захотите использовать оператор MATCHES, который позволяет вам использовать регулярные выражения.

См. Руководство по программированию предикатов: регулярные выражения

...