2010-01-14 25 views
1

J'ai un NSString avec ce contenu:Trouver une URL dans un NSString ou de trouver une chaîne entre deux cordes

<?xml version="1.0" encoding="UTF-8"?> 
<rsp stat="ok"> 
<mediaid>y2q62</mediaid> 
<mediaurl>http://twitpic.com/url</mediaurl> 
</rsp> 

Maintenant, je veux obtenir le Twitpic-URL dans une nouvelle NSString sans toutes les autres chaînes. Comment puis-je faire cela? Puis-je effectuer une recherche dans NSStrings? Genre: Trouver les cordes entre les cordes? Ou puis-je trouver directement des URL dans un NSString?

Merci pour votre aide!

Répondre

6

Utilisez un regex: RegexKitLite

Voici un exemple complet utilisant le HTTP matching URL from the RegexKitLite documentation. La méthode RegexKitLite -componentsMatchedByRegex: renvoie un NSArray de toutes les correspondances d'URL trouvées dans la chaîne.

#import <Foundation/Foundation.h> 
#import "RegexKitLite.h" 

int main(int argc, char *argv[]) { 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 

    NSString *stringToSearch = 
    @"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" 
    @"<rsp stat=\"ok\">\n" 
    @" <mediaid>y2q62</mediaid>\n" 
    @" <mediaurl>http://twitpic.com/url</mediaurl>\n" 
    @"</rsp>\n"; 

    NSString *urlRegex = @"\\bhttps?://[a-zA-Z0-9\\-.]+(?:(?:/[a-zA-Z0-9\\-._?,'+\\&%$=~*!():@\\\\]*)+)?"; 

    NSArray *matchedURLsArray = [stringToSearch componentsMatchedByRegex:urlRegex]; 

    NSLog(@"matchedURLsArray: %@", matchedURLsArray); 

    [pool release]; 
    pool = NULL; 

    return(0); 
} 

Compile et courir avec:

shell% gcc -arch i386 -o url url.m RegexKitLite.m -framework Foundation -licucore 
shell% ./url 
2010-01-14 16:05:32.874 url[71582:903] matchedURLsArray: (
    "http://twitpic.com/url" 
) 
0

Utilisez NSXMLParser après avoir converti la chaîne en NSData.