iphone - 用于在推文中查找主题标签的正则表达式无法正常工作

标签 iphone ios objective-c regex nsregularexpression

我正在尝试构建一个函数来查找 hashtags敬礼。并用 HTML <a> tag 包围它们.这样我就可以链接到他们。这就是我所做的。

NSError* error = nil;

NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:@"(?:\\s|\\A)[##]+([A-Za-z0-9-_]+)" options:0 error:&error];
NSArray* matches = [regex matchesInString:tweetText options:0 range:NSMakeRange(0, [tweetText length])];
for ( NSTextCheckingResult* match in matches )
{
    NSString* matchText = [tweetText substringWithRange:[match range]];
    NSString *matchText2 = [matchText stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
    NSString *search = [matchText2 stringByReplacingOccurrencesOfString:@"#"
                                                            withString:@""];
    NSString *searchHTML= [NSString stringWithFormat:@"<a href='https://twitter.com/search?q=%%23%@'>%@</a>",search,matchText];
    tweetText = [tweetText stringByReplacingOccurrencesOfString:matchText
                                                    withString:searchHTML];
    NSLog(@"match: %@", tweetText);
}

在我执行此函数之前,tweetText 会循环通过另一个函数来查找 URL。所以推文可以包含以下内容。 <a href='http://google.be' target='_blank'>http://google.be</a>

现在有时它会在其他链接周围放置另一个标签,而不仅仅是在主题标签周围。

有人可以帮我解决这个问题吗?

提示

我正在尝试将以下 JAVA 代码转换为 OBJ-C

  String patternStr = "(?:\\s|\\A)[##]+([A-Za-z0-9-_]+)"
     Pattern pattern = Pattern.compile(patternStr)
     Matcher matcher = pattern.matcher(tweetText)
     String result = "";

     // Search for Hashtags
     while (matcher.find()) {
     result = matcher.group();
     result = result.replace(" ", "");
     String search = result.replace("#", "");
     String searchHTML="<a href='http://search.twitter.com/search?q=" + search + "'>" + result + "</a>"
     tweetText = tweetText.replace(result,searchHTML);
     }

编辑

Gers, we kijken er al naar uit! “@GersPardoel: We zitten in België straks naar Genk!!<a href='<a href<a href='https://twitter.com/search?q=%23='http'>='http</a>s://twitter.com/search?q=%23https:/'>https:/</a>/twitter.com/search?q=%23engaan'> #engaan</a>” #GOS12 #genk #fb

最佳答案

问题是您在循环匹配时修改了 tweetText 变量 (tweetText = ...)。想象下一次代码进入循环时会发生什么? substringWithRange 将无法正常工作,因为它是在原始字符串上创建的。尝试纠正问题,如果您无法解决问题,请在此处查看解决方案:http://pastebin.com/DyQqtRzA

编辑:在此处添加解决方案:

NSError* error = nil;

NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:@"(?:\\s|\\A)[##]+([A-Za-z0-9-_]+)" options:0 error:&error];
NSArray* matches = [regex matchesInString:tweetText options:0 range:NSMakeRange(0, [tweetText length])];
NSString* processedString = [[tweetText copy] autorelease];
for ( NSTextCheckingResult* match in matches )
{
    NSString* matchText = [tweetText substringWithRange:[match range]];
    NSString *matchText2 = [matchText stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
    NSString *search = [matchText2 stringByReplacingOccurrencesOfString:@"#"
                                                            withString:@""];
    NSString *searchHTML= [NSString stringWithFormat:@"<a href='https://twitter.com/search?q=%%23%@'>%@</a>",search,matchText];
    processedString = [processedString stringByReplacingOccurrencesOfString:matchText
                                                                 withString:searchHTML];
    NSLog(@"match: %@", processedString);
}

关于iphone - 用于在推文中查找主题标签的正则表达式无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16685583/

相关文章:

iphone - 如何在 iPhone 中寻找流式音频?

iphone - 如何正确处理 iOS 中的互联网连接不可用?

objective-c - 函数 'completionHandler' 的隐式声明在 C99 中无效

iphone - 获取两个位置之间的路线方向

ios - 如何在 TableView 中的行之间创建填充(间距)

ios - 在选项卡 Controller 中嵌入导航 Controller 会隐藏 View Controller 中的导航项

html - iPad 上的方向更改不会重绘 CSS 框阴影

iphone - 如何从 NSMutableArray 访问 NSObject 类变量进行排序

iphone - map View :viewForAnnotation: not called when delegate set in code

ios - Swift - 解析包含 URL 的字符串