繁体   English   中英

如何从Objective-C中的字符串获取url子字符串

[英]How to get a url substring from a string in objective-c

<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”子字符串的最佳方法是什么? NSScanner? NSString方法? 谢谢!

更新:字符串实际上是:

<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>

这是另一种方法:

  • 将字符串转换为实际的HTML。 换句话说,将&lt; &gt; 填充到<>
  • 通过NSXMLParser运行它
  • 解析器委托中 ,检查传递到-parser:didStartElement:namespaceURI:qualifiedName:attributes:方法中的属性字典。
  • 如果元素名称为@"img" ,则attributes字典应具有一个名为@"src"的键,该键映射到字符串@"http://b.vimeocdn.com/ts/152/946/152946954_200.jpg"
  • 有了字符串后,使用+[NSURL URLWithString:]将其转换为NSURL很简单。

无论源HTML随时间如何变化,这都将起作用。 建议的其他方法非常脆弱,因为它们依赖于src所有小写​​字母,并且字符串中的任意位置只有一个src属性(如果有2个,该怎么办?)。 您不想解析HTML; 您想从XML元素中获取属性。 因此,请使用内置的方法! :)

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将是您想要的字符串。

您可以使用框架进行URL检测和解析,例如AutoHyperlinks 在iOS上,您当然必须静态地构建它或将源直接构建到您的应用程序中。

或者,仅对于iOS(当前),使用NSDataDetector 数据检测器可以找到URL,物理地址,电话号码等; 您可以从字符串中告诉您所需的内容,然后使用NSRegularExpression的方法获取其发现。

假设完整的字符串称为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,因此,如果字符串中的字符数少于或等于您想要的字符 ,只需更改最后一行中的数字即可

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM