如何在NSArray中查找可能的字符串?

时间:2013-10-18 04:33:35

标签: objective-c regex nsstring nsarray sql-like

我有NSArray NSStrings,我想要做的是例如查找8个字符的字符串,其中R作为第一个字符,A作为第三个字符串。< / p>

在SQL中,我会这样做:

SELECT string FROM array WHERE string LIKE 'R*A*****';

但我不知道在Obj-C中最好的方法是什么。当然我可以使用characterAtIndex:创建一个检查字符的函数,但我确信有更快的方法可以像正则表达式一样继续。

感谢您的帮助。

3 个答案:

答案 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]]);             


}

希望它能帮助!!!