2011-06-25 55 views
1
<p><a href="http://vimeo.com/23486376" title="Rebecca Black's Friday on Rock Band"><img src="http://b.vimeocdn.com/ts/152/946/152946954_200.jpg" alt="Rebecca Black's Friday on Rock Band" /></a></p><p></p><p>Cast: <a href="http://vimeo.com/thenerdery" style="color: #2786c2; text-decoration: none;">The Nerdery</a></p> 

我得到了一個類似於上面的字符串,我想知道什麼是最好的方式在objective-c中獲得「http://b.vimeocdn.com /ts/152/946/152946954_200.jpg「substring? NSScanner? NSString方法?謝謝!如何從一個字符串中獲得一個url substring objective-c

更新:字符串居然是:

<p><a href="http://vimeo.com/23333305" title="Ad League Bowling Championship"><img src="http://b.vimeocdn.com/ts/151/787/151787049_200.jpg" alt="Ad League Bowling Championship" /></a></p><p></p><p>Cast: <a href="http://vimeo.com/thenerdery" style="color: #2786c2; text-decoration: none;">The Nerdery</a></p> 

回答

5

這裏的另一種方法:

  • 變換串入實際的HTML。換句話說,CONVER的&lt;&gt;東西到<>
  • 運行它通過NSXMLParser
  • parser delegate,檢查屬性字典傳遞到-parser:didStartElement:namespaceURI:qualifiedName:attributes:方法。
  • 如果元素名稱是@"img",那麼attributes字典應該有一個名爲​​的鍵映射到字符串@"http://b.vimeocdn.com/ts/152/946/152946954_200.jpg"
  • 一旦你的字符串,它的瑣碎使用+[NSURL URLWithString:]

這不論如何隨着時間的推移源HTML的改變也會把它改造成一個NSURL。建議的其他方法非常脆弱,因爲它們依賴於像src這樣的全部小寫字母,並且在字符串中的任何位置只有一個src屬性(如果您有2個?)。你不想解析HTML;你想從XML元素中獲取一個屬性。所以使用內置的方式來做到這一點! :)

+0

看起來就是這樣做的方式。但是,儘管我用盡了快捷和骯髒的方式。謝謝你的偉大答案。 – randomor

0

假設完整的字符串被稱爲MyString的,你可以這樣做:

NSRange srcRange = [myString rangeOfString:@"src="]; 
NSRange endrange = [myString rangeOfString:@"\"" options:nil range: 
    NSMakeRange(srcRange.location + 5, [mystring count] - srcRange.location - 6)]; 
NSString *url = [myString subStringWithRange: 
    NSMakeRange(srcRange.location + 5, srcRange.location + 5 + endRange.lenght)]; 

我沒有測試過,所以我可能已經把+5而不是+6,所以如果字符串中的字符少於或多於一個字符,只需在最後一行中更改號碼即可。

+0

我想我會在最後使用它:'NSString * imgString = [[NSString alloc] init]; NSScanner * scanner = [NSScanner scannerWithString:descriptionString]; [scanner scanUpToString:@「img src = "」intoString:nil]; [scanner scanUpToString:@「http」intoString:nil]; [scanner scanUpToString:@「" alt」intoString:&imgString];'無論如何。 – randomor

+0

如果您自己找到了解決方案,非常高興 – edo42

2
NSString *strComplete = @"&lt;p>&lt;a href="http://vimeo.com/23486376" title="Rebecca Black's Friday on Rock Band">&lt;img src="http://b.vimeocdn.com/ts/152/946/152946954_200.jpg" alt="Rebecca Black's Friday on Rock Band" />&lt;/a>&lt;/p>&lt;p>&lt;/p>&lt;p>Cast: &lt;a href="http://vimeo.com/thenerdery" style="color: #2786c2; text-decoration: none;">The Nerdery&lt;/a>&lt;/p>"; 
NSArray *arrComplete = [strComplete componentSeparatedBy:@"src="]; 
NSString *strSecond = [arrComplete objectAtIndex:1]; 
NSArray *arrSecond = [strSecond componentSeparatedBy:@" alt"]; 
NSString *strURLImage = [arrSecond objectAtIndex:0]; 

strURLImage將是你想要的字符串。

+0

這對我來說更有意義,可能比我的解決方案更有效。謝謝! – randomor

1

您可以使用框架進行URL檢測和解析,例如AutoHyperlinks。在iOS上,您當然必須靜態構建它,或者直接將源代碼構建到應用程序中。

此外,僅適用於iOS(當前),請使用NSDataDetector。數據檢測器可以找到URL,物理地址,電話號碼等。你告訴它你想從字符串中得到什麼,然後用the methods of NSRegularExpression來獲得它的發現。

相關問題