首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用自定义NSDataDetector来检测某些正则表达式模式?

如何使用自定义NSDataDetector来检测某些正则表达式模式?
EN

Stack Overflow用户
提问于 2011-08-16 17:53:29
回答 1查看 2.4K关注 0票数 2

我目前正在使用NSDataDetectors查找链接:

代码语言:javascript
复制
-(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解析@:

代码语言:javascript
复制
"Hello @sheehan, you are cool"

我希望它能检测到@sheehan

注意:我想使用NSDataDetector或regex模式匹配。没有外观标签或控件等。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-16 20:13:02

您可以使用这个使用NSRegularExpression查找@name匹配的方法。

代码语言:javascript
复制
- (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。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7082668

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档