使用RegexKitLite在NSString(BBCode)中查找URL

时间:2010-08-27 14:38:59

标签: iphone objective-c regex regexkitlite

HI,

我有一个NSString,它包含了很多文字。文本内部是iTunes URL。 URL被BBCode屏蔽。如何提取纯URL?

很抱歉,但我的正则表达能力非常差。

案文:

  

Lorem ipsum dolor sit amet,consetetur sadipscing elitr,sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,sed diam voluptua。在ver    [itunes link =“http://www.example.tld/redirect.php?url = http%3A%2F%2Fitunes.apple.com%2Fde%2Fapp%2Fbaby-monitor-alarm%2Fid331519989%3Fmt% 3D8%26uo%3D4“title =”Babyphon“] Lorem ipsum dolor sit amet,consetetur sadipscing elitr,sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,sed diam voluptua。在ver

我的第一次尝试:

NSString *regEx = @"(link=?).*"; 
NSString *match = [myText stringByMatching:regEx]; 

if ([match isEqual:@""] == NO) { 
    NSLog(@"Match Ituneslink; %@", match); 
}
else
{ 
    NSLog(@"Not found."); 
}

结果:

  

链接=“http://www.appsnight.tv/redirect.php?url=http%3A%2F%2Fitunes.apple.com%2Fde%2Fapp%2Fmare-fernweh%2Fid379051618%3Fmt%3D8%26uo% 3D4“title =”Mare“]

需要太多,我只需要itunes链接: - (

2 个答案:

答案 0 :(得分:0)

如果方案总是一样的话,你可以这样做:

NSRange begin = [myText rangeOfString:@"link="];
NSRange end = [myText rangeOfString:@" title="];

使用两个范围的位置组件创建一个新组件:

NSRange linkRange;
linkRange.location = begin.location + 6;
linkRange.length = (end.location - 1) - (linkRange.location);

您可以做到:

NSString *myLink = [myText substringWithRange:linkRange];

我没有尝试过你的示例文本,也许我得到偏移(+6和-1)错误,你需要调整它们。希望有所帮助!

答案 1 :(得分:0)

我找到了这个解决方案。

 NSString *regEx = @"(link=\"?)[a-zA-Z0-9:/.?=%-]*";
 NSString *match = [myText stringByMatching:regEx];