NSPredicates开始使用

时间:2010-12-01 20:41:04

标签: iphone objective-c nspredicate

我有一个NSArray,其内容是字符串,格式类似于: [A-Z] {+} - [0-9] {+}

所以基本上是一堆重复的字母字符,一个分隔符,然后是一个或多个数字,所以

我希望按照与分隔符匹配的数组中的值进行过滤,但我似乎无法以谓词的格式显式指定它:

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

如何约束这种情况的过滤?

2 个答案:

答案 0 :(得分:1)

您可以使用" MATCHES"运算符进行正则表达式搜索,如下所示:

NSPredicate * p = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", @"[a-z]+-.*"];
NSArray * s = [NSArray arrayWithObject:@"abc-123"];
NSLog(@"%@", [s filteredArrayUsingPredicate:p]);
但是,有一点需要注意。正则表达式在整个字符串中匹配。因此,如果您想要找到以3个字母开头的所有元素,那么您的表达式就不能只是" [a-z] {3}"。它必须是" [a-z] {3}。*"。对于任何不是3个字母的东西,第一个将失败,而第二个将匹配至少3个字母长的任何东西。

我花了一段时间才意识到这一点......

答案 1 :(得分:0)

您可能希望使用MATCHES运算符来使用正则表达式。

请参阅Predicate Programming Guide:Regular Expressions