Iphone 如何从objective-c中的字符串获取url子字符串

Iphone 如何从objective-c中的字符串获取url子字符串,iphone,objective-c,cocoa,parsing,Iphone,Objective C,Cocoa,Parsing,我得到了上面这样的字符串,我想知道objective-c中获得http://b.vimeocdn.com/ts/152/946/152946954_200.jpg“子串?NSScanner?NSString方法?谢谢 更新:字符串实际上是: <p><a href="http://vimeo.com/23486376" title="Rebecca Black's Friday on Rock Band"><img src="http://b.

我得到了上面这样的字符串,我想知道objective-c中获得http://b.vimeocdn.com/ts/152/946/152946954_200.jpg“子串?NSScanner?NSString方法?谢谢

更新:字符串实际上是:

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

假设完整字符串称为myString,则可以执行以下操作:

<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代替+6,所以如果字符串的字符数比您想要的少或多,只需更改最后一行中的数字即可。

假设完整的字符串称为myString,您可以执行以下操作:

<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>
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,所以如果字符串的字符数比您想要的少或多,只需更改最后一行中的数字

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)];
strurimage将是您所需的字符串


strurimage将是您所需的字符串

还有另一种方法:

  • 将字符串转换为实际的HTML。换句话说,将
    内容转换为
  • 通过
    NSXMLParser运行它
  • 在中,检查传递到方法中的属性字典
  • 如果元素名为
    @“img”
    ,则
    属性
    字典应具有一个名为
    @“src”
    的键,该键映射到字符串
    @http://b.vimeocdn.com/ts/152/946/152946954_200.jpg“
  • 一旦您有了字符串,就可以使用
    +[NSURL URLWithString::
    将其转换为
    NSURL

无论源HTML如何随时间变化,这都将起作用。所建议的其他方法非常脆弱,因为它们依赖于
src
等全小写的东西,并且字符串中的任何地方都只有一个
src
属性(如果有2个呢?)。你不想解析HTML;您希望从XML元素中获取属性。因此,请使用内置的方式来执行此操作!:)

还有另一种方法:

  • 将字符串转换为实际的HTML。换句话说,将
    内容转换为
  • 通过
    NSXMLParser运行它
  • 在中,检查传递到方法中的属性字典
  • 如果元素名为
    @“img”
    ,则
    属性
    字典应具有一个名为
    @“src”
    的键,该键映射到字符串
    @http://b.vimeocdn.com/ts/152/946/152946954_200.jpg“
  • 一旦您有了字符串,就可以使用
    +[NSURL URLWithString::
    将其转换为
    NSURL

无论源HTML如何随时间变化,这都将起作用。所建议的其他方法非常脆弱,因为它们依赖于
src
等全小写的东西,并且字符串中的任何地方都只有一个
src
属性(如果有2个呢?)。你不想解析HTML;您希望从XML元素中获取属性。因此,请使用内置的方式来执行此操作!:)

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


或者,仅限iOS(当前),使用。数据检测器可以找到URL、物理地址、电话号码等。;您可以告诉它您想要从字符串中得到什么,然后使用它来获取结果。

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


或者,仅限iOS(当前),使用。数据检测器可以找到URL、物理地址、电话号码等。;您可以告诉它您希望从字符串中得到什么,然后使用它来获得结果。

我想我最终会使用它:`NSString*imgString=[[NSString alloc]init];NSScanner*scanner=[NSScanner scannerWithString:descriptionString];[scanner scanuptString:@“img src=”“intoString:nil];[scanner scanuptString:@“http”intoString:nil];[scanner scanuptString:@“alt”intoString:&imgString];`无论如何,谢谢。如果你能自己找到解决方案,我会非常高兴。我想我最后会用这个来代替:`NSString*imgString=[[NSString alloc]init];NSScanner*scanner=[NSScanner scannerWithString:descriptionString];[scanner scanuptString:@“img src=”“intoString:nil];[scanner scanuptString:@“http”intoString:nil];[scanner scanuptString:@“alt”intoString:&imgString];`无论如何,谢谢。如果你能自己找到解决方案,我会非常高兴。这对我来说更有意义,可能比我的解决方案更有效。谢谢这对我来说更有意义,可能比我的解决方案更有效。谢谢看起来就是这样做的。但最后我还是用了我那又快又脏的方式。谢谢你的回答。看起来就是这样。但最后我还是用了我那又快又脏的方式。谢谢你的回答。