2011-08-16 22 views
2

我目前正在使用NSDataDetectors來查找鏈接:如何使用自定義NSDataDetector來檢測某些正則表達式模式?

-(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或正則表達式模式匹配。沒有客戶標籤或控件等

回答

4

您可以使用此方法使用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與所有匹配的字符串。

相關問題