[英]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>
这是另一种方法:
<
和>
填充到<
和>
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 = @"<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>";
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.