Как я могу использовать пользовательский NSDataDetector для обнаружения определенных шаблонов регулярных выражений? - PullRequest
2 голосов
/ 16 августа 2011

В настоящее время я использую NSDataDetectors для поиска ссылок:

-(void)setBodyText
{
    NSString* labelText = [[message valueForKey:@"body"]gtm_stringByUnescapingFromHTML];

    NSDataDetector *linkDetector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink error:nil];
    NSArray *matches = [linkDetector matchesInString:labelText options:0 range:NSMakeRange(0, [labelText length])];
    for (NSTextCheckingResult *match in matches) {
        if ([match resultType] == NSTextCheckingTypeLink) {
            NSURL *url = [match URL];
            [bodyLabel addCustomLink:url inRange:[match range]];
            NSLog(@"found URL: %@", url);
        }
    }

    [bodyLabel setText:labelText];
    [Utils alignLabelWithTop:bodyLabel];
}

Как я могу использовать NSDataDetectors для анализа @, например:

"Hello @sheehan, you are cool"

Я хочу, чтобы он мог обнаруживать @sheehan

ПРИМЕЧАНИЕ. Я хочу использовать сопоставление с образцом NSDataDetector или регулярное выражение. Нет обычного этикетки или элементы управления и т. Д.

1 Ответ

4 голосов
/ 17 августа 2011

Вы можете просто использовать этот метод, который использует NSRegularExpression, чтобы найти совпадения @name.

- (NSMutableArray *)findTwitterHandle:(NSString *)text {

    NSError *error = nil;

    NSRegularExpression *regex = [[NSRegularExpression alloc] initWithPattern:@"(@[a-zA-Z0-9_]+)" 
                                                                  options:NSRegularExpressionCaseInsensitive 
                                                                    error:&error];

    if (error != nil) {

        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" 
                                                    message:[error localizedDescription] 
                                                   delegate:nil 
                                          cancelButtonTitle:nil 
                                          otherButtonTitles:@"Ok", nil];

        [alert show];

        [alert release];

    }

    NSMutableArray *siteNames = [NSMutableArray array];

    NSArray *matches = [regex matchesInString:text options:0 range:NSMakeRange(0, [text length])];

    for (NSTextCheckingResult *result in matches) {

        [siteNames addObject:[text substringWithRange:result.range]];

    }

    [regex release];

    return siteNames;

}

Этот метод вернет NSMutableArray со всеми совпадающими строками.

...