我有一个NSArray,其内容是字符串,格式类似于: [A-Z] {+} - [0-9] {+}
所以基本上是一堆重复的字母字符,一个分隔符,然后是一个或多个数字,所以
我希望按照与分隔符匹配的数组中的值进行过滤,但我似乎无法以谓词的格式显式指定它:
NSPredicate *aPredicate = [NSPredicate predicateWithFormat:@"self BEGINSWITH %@", aValue];
NSArray *filtered = [entries filteredArrayUsingPredicate:aPredicate];
如何约束这种情况的过滤?
答案 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运算符来使用正则表达式。