【问题标题】:Extract Contents of Anchor Tag提取锚标签的内容
【发布时间】:2012-04-24 16:48:07
【问题描述】:

我要做的是提取存储在 NSString 中的锚标记的内容。

例如,如果我有一个包含以下内容的字符串:

<a href="/url?q=https://kindle.amazon.com/&amp;sa=U&amp;ei=GdiWT5uCEI6BhQfihoTzDQ&amp;ved=0CCUQFjAB&amp;usg=AFQjCNEoRolsgoynLNS0H60VWz-9EaQdtw">Amazon <b>Kindle</b>: Welcome</a>

我将如何提取锚标记的内容,以便获得以下内容:

https://kindle.amazon.com/&amp;sa=U&amp;ei=GdiWT5uCEI6BhQfihoTzDQ&amp;ved=0CCUQFjAB&amp;usg=AFQjCNEoRolsgoynLNS0H60VWz-9EaQdtw

任何帮助将不胜感激!

我完全被难住了,而这应该很简单?下面发布的答案一直返回 null。

【问题讨论】:

    标签: objective-c xcode cocoa webview


    【解决方案1】:

    如果你可以要求 Lion,那么你可以使用NSRegularExpression

    NSString* stringToSearch = @"<a href=\"/url?q=https://kindle.amazon.com/&amp;sa=U&amp;ei=GdiWT5uCEI6BhQfihoTzDQ&amp;ved=0CCUQFjAB&amp;usg=AFQjCNEoRolsgoynLNS0H60VWz-9EaQdtw\">Amazon <b>Kindle</b>: Welcome</a>";
    
    NSError *error;
    NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"href\\s*=\\s*\"\\/url\\?q=([^\"]*)\""
                                                                           options:NSRegularExpressionCaseInsensitive
                                                                             error:&error];
    
    NSTextCheckingResult* match = [regex firstMatchInString:stringToSearch options:0 range:NSMakeRange(0, [stringToSearch length])];
    if(match.numberOfRanges == 2)
    {
        NSRange capture = [match rangeAtIndex:1];
        NSString* URLString = [stringToSearch substringWithRange:capture];
        NSLog(@"%@",URLString);
    }
    

    【讨论】:

      【解决方案2】:

      一种可能的解决方案是使用 NSScanner -

      NSString *urlString = nil;
      NSString *htmlString = @"<a href=\"/url?q=https://kindle.amazon.com/&amp;sa=U&amp;ei=GdiWT5uCEI6BhQfihoTzDQ&amp;ved=0CCUQFjAB&amp;usg=AFQjCNEoRolsgoynLNS0H60VWz-9EaQdtw\">Amazon <b>Kindle</b>: Welcome</a>";
      
      NSScanner *scanner = [NSScanner scannerWithString:htmlString];
      
      [scanner scanUpToString:@"<a" intoString:nil];
      if (![scanner isAtEnd]) {
          [scanner scanUpToString:@"http" intoString:nil];
          NSCharacterSet *charset = [NSCharacterSet characterSetWithCharactersInString:@">"];
          [scanner scanUpToCharactersFromSet:charset intoString:&urlString];
      }
      NSLog(@"%@", urlString);
      

      在日志中 - https://kindle.amazon.com/&sa=U&ei=GdiWT5uCEI6BhQfihoTzDQ&ved=0CCUQFjAB&usg=AFQjCNEoRolsgoynLNS0H60VWz-9EaQdtw

      【讨论】:

      • 感谢您的回答,这似乎可行,但是当我在 urlString 上执行 NSLog 时它返回 null,我做错了吗?
      • @Cristian - 当我尝试它时,它非常适合我,你是否正确传递字符串。
      • 是的,我不知道为什么它不起作用。无论哪种方式,我都通过改进填充字符串的javascript来解决问题,这样我就不必操纵它了。还是谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-26
      相关资源
      最近更新 更多