2012-04-24 60 views
0

我想要做的是提取存儲在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。

回答

0

一個可能的解決方案是使用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

+0

感謝您的答案,這似乎會工作,但是當我做了一個NSLog的urlString它返回null,我做了什麼錯誤? – Cristian 2012-04-24 17:39:37

+0

@Cristian - 當我嘗試它時,它對我來說很完美,你是否正確地傳遞字符串。 – rishi 2012-04-25 03:58:27

+0

是的,我是我不知道爲什麼它不起作用。無論哪種方式,我已經通過改善填充字符串的JavaScript來解決問題,所以我不必操縱它。不管怎麼說,還是要謝謝你 – Cristian 2012-04-25 14:29:17

0

如果你可以要求獅子,那麼你可以使用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); 
}