2010-03-14 5 views
3

Mon application reçoit de nombreuses chaînes de texte qui peuvent contenir ou non une URL n'importe où dans la chaîne. Quelle serait la meilleure méthode pour extraire une URL à partir d'une chaîne? Je vous remercie.Extraction d'une URL à partir d'une chaîne

Répondre

3

The BSD-licensed AutoHyperlinks framework fournit les classes pour analyser le texte pour les URL et les retourner à vous ou les marquer comme des liens dans une chaîne attribuée.

Je ne pense pas qu'il construit hors de la boîte pour l'iPhone, mais vous pouvez toujours ajouter des directives de préprocesseur pour découper tout code dépendant AppKit. L'interface scan-and-return devrait juste fonctionner, une fois que vous l'aurez compilé. (Assurez-vous d'exécuter les tests.)

Mike Abdullah wrote a patch for iPhone support. Vous pourriez essayer.

+0

Merci, j'ai essayé cela, mais à en juger par le nombre d'erreurs et d'avertissements générés, il faudra une quantité de travail importante pour obtenir ce travail sur l'iPhone - – RunLoop

+0

JK: Cela peut induire en erreur. Une seule ligne de code peut produire beaucoup d'erreurs si elle est suffisamment incompilable, mais c'est toujours une seule ligne de code. Je pense que les parties de AutoHyperlinks dépendantes d'AppKit sont suffisamment isolées pour que vous puissiez les conditionner assez facilement. –

+0

Merci Peter. Je vais essayer le patch demain. – RunLoop

8

Si vous travaillez sur une application Mac, Mac OS X 10.6 offre une nouvelle API pour vous permettre de détecter les URL avec le correcteur orthographique. Vous pouvez le faire de cette façon.

NSString *s = @"http://example.com" 
NSInteger wordCount = 0; 
NSOrthography *orthography = nil; 
NSArray *checkResults = [[NSSpellChecker sharedSpellChecker] checkString:s range:NSMakeRange(0, [s length]) types:NSTextCheckingTypeLink options:nil inSpellDocumentWithTag:0 orthography:&orthography wordCount:&wordCount]; 
for (NSTextCheckingResult *result in checkResults) { 
    NSRange range = result.range; 
    NSURL *URL = result.URL; 
} 
+0

Ceci est certainement préférable d'apporter un cadre dédié si vous le pouvez. Notez que vous ne vous souciez pas vraiment du nombre de mots de l'orthographe lors de la recherche de liens, il suffit de passer un pointeur NULL pour plus d'efficacité. –

+0

J'ai également implémenté ceci dans notre code KSFileUtilities open source: https://github.com/karelia/KSFileUtilities/commit/4ef561512fab9a169fcf63129037bfddfda6257b –

Questions connexes