2012-11-30 101 views
0

我正在使用NSRegularExpression读取文本并找出hashtag。 这是我在regularExpressionWithPattern中使用的NSString。NSRegularExpression ISSUE

- (NSString *)hashtagRegex 
{ 
    return @"#((?:[A-Za-z0-9-_]*))"; 
    //return @"#{1}([A-Za-z0-9-_]{2,})"; 

} 

这是我的方法:

// Handle Twitter Hashtags 
    detector = [NSRegularExpression regularExpressionWithPattern:[self hashtagRegex] options:0 error:&error]; 
    links = [detector matchesInString:theText options:0 range:NSMakeRange(0, theText.length)]; 
    current = [NSMutableArray arrayWithArray:links]; 

    NSString *hashtagURL = @"http://twitter.com/search?q=%23"; 
    //hashtagURL = [hashtagURL stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding]; 

    for (int i = 0; i < [links count]; i++) { 

    NSTextCheckingResult *cr = [current objectAtIndex:i]; 

    NSString *url = [theText substringWithRange:cr.range]; 

    NSString *nohashURL = [url stringByReplacingOccurrencesOfString:@"#" withString:@""]; 
    nohashURL = [nohashURL stringByReplacingOccurrencesOfString:@" " withString:@""]; 

    [theText replaceOccurrencesOfString:url 
          withString:[NSString stringWithFormat:@"<a href=\"%@%@\">%@</a>", hashtagURL, nohashURL, url] 
           options:NSLiteralSearch 
            range:NSMakeRange(0, theText.length)]; 
    current = [NSMutableArray arrayWithArray:[detector matchesInString:theText options:0 range:NSMakeRange(0, theText.length)]]; 

    } 

    [theText replaceOccurrencesOfString:@"\n" withString:@"<br />" options:NSLiteralSearch range:NSMakeRange(0, theText.length)]; 

    [_aWebView loadHTMLString:[self embedHTMLWithFontName:[self fontName] 
                size:[self fontSize] 
                text:theText] 
        baseURL:nil]; 

一切工作,但它想出了一个小问题,当我使用这样的字符串:

NSString * theText = @"#twitter #twitterapp #twittertag"; 

我的代码只凸显#twitter在每个单词上,而不是它的第二部分(#twitter #twitter(app)#twitter(tag))。 我希望有人能帮助我!

谢谢:)

回答

0

声明

[theText replaceOccurrencesOfString:url 
         withString:[NSString stringWithFormat:@"<a href=\"%@%@\">%@</a>", hashtagURL, nohashURL, url] 
          options:NSLiteralSearch 
           range:NSMakeRange(0, theText.length)]; 

正在取代字符串url与替换字符串的所有实例。在第一次通过循环的例子中,url@"#twitter",并且在theText内的该字符串的所有三次出现被一次性替换。这是theText看起来像那么:

<a href="http://twitter.com/search?q=%23twitter">#twitter</a> <a href="http://twitter.com/search?q=%23twitter">#twitter</a>app <a href="http://twitter.com/search?q=%23twitter">#twitter</a>tag 

等等,当然,接下来的两次一轮循环中,结果不是你所期望相当的...!

我认为解决办法是限制更换的范围:你说得对,我完全心不在焉,我没有注意到that..thank-你它像一个

[theText replaceOccurrencesOfString:url 
         withString:[NSString stringWithFormat:@"<a href=\"%@%@\">%@</a>", hashtagURL, nohashURL, url] 
          options:NSLiteralSearch 
           range:cr.range]; 
+0

魅力!! –