我正在使用NSRegularExpression来读取文本并查找hashtag。这是我在regularExpressionWithPattern中使用的NSString。
- (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))。我希望有人能帮助我!
谢谢您:)
发布于 2012-12-01 08:29:19
这句话
[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所以,当然,在接下来的两次循环中,结果并不完全是你所期望的…好了!
我认为解决办法是限制替换的范围:
[theText replaceOccurrencesOfString:url
withString:[NSString stringWithFormat:@"<a href=\"%@%@\">%@</a>", hashtagURL, nohashURL, url]
options:NSLiteralSearch
range:cr.range];https://stackoverflow.com/questions/13654722
复制相似问题