2014-02-09 58 views
0

目前我正在使用NSRegularExpression從rss輸出中提取圖像。這是我用:按對象限制NSRegularExpression

for (NSDictionary *story in stories) { 

    NSString *string = [story objectForKey:@"content:encoded"]; 

    NSRange rangeOfString = NSMakeRange(0, string.length); 

    NSString *pattern = @"<img\\s[\\s\\S]*?src\\s*?=\\s*?['\"](.*?)['\"][\\s\\S]*?>"; 
    NSError* error = nil; 

    NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:&error]; 
    NSArray *matchs = [regex matchesInString:[story objectForKey:@"content:encoded"] options:0 range:rangeOfString]; 
    for (NSTextCheckingResult* match in matchs) { 
     NSLog(@"url: %@", [string substringWithRange:[match rangeAtIndex:1]]); 
    } 


} 

這項工作真的很好,只是我只需要在故事每個鍵一個圖像鏈接,即使是這樣(像這樣),它們每一個以上的圖像鍵。

我該如何解決這個問題?

感謝

回答

0

聽起來像所有你需要做的,是取代你的 「matches」 循環:

for (NSTextCheckingResult* match in matchs) { 
    NSLog(@"url: %@", [string substringWithRange:[match rangeAtIndex:1]]); 
} 

與此:

if([matchs count] > 0) 
{ 
    [storyMatches addObject: [string substringWithRange:[match rangeAtIndex:1]]]; 
} 

確保來聲明storyMatches可變數組開始循環前通過stories

NSMutableArray *storyMatches = [[NSMutableArray alloc] init]; 

換句話說,你的代碼應該是這個樣子:

NSMutableArray *storyMatches = [[NSMutableArray alloc] initWithCapacity:[stories count]]; 

for (NSDictionary *story in stories) { 

    NSString *string = [story objectForKey:@"content:encoded"]; 

    NSRange rangeOfString = NSMakeRange(0, string.length); 

    NSString *pattern = @"<img\\s[\\s\\S]*?src\\s*?=\\s*?['\"](.*?)['\"][\\s\\S]*?>"; 
    NSError* error = nil; 

    NSRegularExpression* regex = [NSRegularExpression regularExpressionWithPattern:pattern options:0 error:&error]; 
    NSArray *matchs = [regex matchesInString:[story objectForKey:@"content:encoded"] options:0 range:rangeOfString]; 
    if([matchs count] > 0) 
    { 
     [storyMatches addObject:[string substringWithRange:[match rangeAtIndex:1]]]; 
    } 
} 

NSLog(@"storyMatches count is %d and contents is %@", [storyMatches count], [storyMatches description]); 
+0

它給我這個錯誤「「爲‘NSArray的’不可見@interface聲明選擇‘rangeAtIndex:’」' – user3241911

+0

匹配不一個NSArray對象,而不是一個「NSTextCheckingResult」,對吧? –

+0

邁克爾我的不好,我沒有以正確的方式替換代碼。 它仍然打印17個物體而不是10個。 – user3241911