我有NSArray
NSStrings
,我想要做的是例如查找8个字符的字符串,其中R作为第一个字符,A作为第三个字符串。< / p>
在SQL中,我会这样做:
SELECT string FROM array WHERE string LIKE 'R*A*****';
但我不知道在Obj-C中最好的方法是什么。当然我可以使用characterAtIndex:
创建一个检查字符的函数,但我确信有更快的方法可以像正则表达式一样继续。
感谢您的帮助。
答案 0 :(得分:3)
最简单的方法可能只是使用indexesOfObjectsPassingTest:
,并定义一个只检查你关心的两个字符的块。类似的东西:
NSIndexSet *indexes = [array indexesOfObjectsPassingTest:
^(id obj, NSUInteger idx, BOOL *stop)
{
if (([obj length] == 8) &&
([obj characterAtIndex:0] == 'R') &&
([obj characterAtIndex:2] == 'A'))
return YES;
else
return NO;
}
];
答案 1 :(得分:2)
仅为了完整性:模式匹配方法 类似于SQL查询的是
NSPredicate *predicate =
[NSPredicate predicateWithFormat:@"SELF LIKE %@", @"R?A?????"];
NSArray *filtered = [array filteredArrayUsingPredicate:predicate];
但快速测试表明,基于块的过滤在Carl的答案中要快得多, 至少在这种情况下。
答案 2 :(得分:1)
使用characterAtIndex是最简单的选择,但如果你真的想使用正则表达式模式匹配,那么这种模式可能会有所帮助。
for(int i=0;i<[array count];i++) //'array' is the nsarray with collection of strings
{
string = [array objectAtIndex:i]; //'string' takes each string from the array
NSRegularExpression* reg=[NSRegularExpression regularExpressionWithPattern:@"R[a-zA-Z]{1}A[a-zA-Z]{5}" options:0 error:&error];
NSTextCheckingResult *match=[reg firstMatchInString:string options:0 range:NSMakeRange(0, [string length])];
NSLog(@"result is %@",[string substringWithRange:[match rangeAtIndex:0]]);
}
希望它能帮助!!!