首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSRegularExpression问题

NSRegularExpression问题
EN

Stack Overflow用户
提问于 2012-12-01 07:37:56
回答 1查看 274关注 0票数 0

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

代码语言:javascript
复制
- (NSString *)hashtagRegex
{
    return @"#((?:[A-Za-z0-9-_]*))";
    //return @"#{1}([A-Za-z0-9-_]{2,})";

}

这是我的方法:

代码语言:javascript
复制
 // 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];

一切都正常,但当我使用这样的字符串时,它解决了一个小问题:

代码语言:javascript
复制
NSString * theText = @"#twitter #twitterapp #twittertag";

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

谢谢您:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-01 08:29:19

这句话

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

将字符串url的所有实例替换为替换字符串。在您给出的示例中,第一次遍历循环时,url@"#twitter",并且在theText中出现该字符串的所有三次都会被一次性替换。下面是theText的样子:

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

所以,当然,在接下来的两次循环中,结果并不完全是你所期望的…好了!

我认为解决办法是限制替换的范围:

代码语言:javascript
复制
[theText replaceOccurrencesOfString:url 
                         withString:[NSString stringWithFormat:@"<a href=\"%@%@\">%@</a>", hashtagURL, nohashURL, url]
                            options:NSLiteralSearch 
                              range:cr.range];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13654722

复制
相关文章

相似问题

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