Как создать предикат, где значение содержит последовательность символов, таких как фильтрация XCode - PullRequest
1 голос
/ 27 января 2012

Я хочу реализовать функцию фильтрации XCode с помощью предиката. Если вы фильтруете имена функций в XCode, то при помощи «myFunc» он будет искать эту последовательность символов, а не точную строку.

Пример:

momsYellowFunCar
м Г FunC

Должен ли я использовать MATCHES и предоставить какое-нибудь регулярное выражение как?

1 Ответ

2 голосов
/ 28 января 2012

Вы можете сделать это с помощью NSRegularExpression, встроенного в 10.7+ и iOS 4.0+. Примерно так:

NSArray *stringsToSearch = [NSArray arrayWithObjects:@"mYFunC", @"momsYellowFunCar", @"Hello World!", nil];
NSString *searchString = @"mYFunC";
NSMutableString *regexPattern = [NSMutableString string];
for (NSUInteger i=0; i < [searchString length]; i++) {
    NSString *character = [searchString substringWithRange:NSMakeRange(i, 1)];
    [regexPattern appendFormat:@"%@.*", character];
}
NSError *error = nil;
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:regexPattern
                                                                       options:NSRegularExpressionDotMatchesLineSeparators
                                                                         error:&error];
if (!regex) {
    NSLog(@"Couldn't create regex: %@", error);
    return;
}

NSMutableArray *matchedStrings = [NSMutableArray array];
for (NSString *string in stringsToSearch) {
    if ([regex numberOfMatchesInString:string options:0 range:NSMakeRange(0, [string length])] > 0) {
        [matchedStrings addObject:string];
    }
}

NSLog(@"Matched strings: %@", matchedStrings); // mYFunC and momsYellowFunCar, but not Hello World!

Если вам нужно использовать NSPredicate, вы можете использовать вариант этого кода с -[NSPredicate predicateWithBlock:].

...