2011-05-14 22 views
13

Dada una cadena grande, ¿cuál es la mejor manera de crear una matriz de todas las URL válidas que están contenidas dentro de la cadena?Objetivo-C: buscar una URL dentro de una cadena

+0

Es esto para la visualización en un 'UITextView' o una' UILabel' o para soemthing otro sitio? – dredful

+0

Consulte [mi respuesta] (http://stackoverflow.com/a/25574255/1966109) para obtener una pregunta similar que utiliza Swift 3 y ofrece 2 formas de resolver su problema. –

Respuesta

41

No es necesario utilizar RegexKitLite para esto, ya que iOS 4 Apple proporciona NSDataDetector (una subclase de NSRegularExpression).

Se puede utilizar simplemente como esto (source es su cadena):

NSDataDetector* detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink error:nil]; 
NSArray* matches = [detector matchesInString:source options:0 range:NSMakeRange(0, [source length])]; 
+0

NSDataDetector está * solo * disponible en iOS. El título de la pregunta es "* Objetivo-C * Encontrar una URL dentro de una cadena" –

+0

Es cierto, depende de qué plataforma esté trabajando Mick ... Pero al ver sus últimas preguntas, apunta a iOS. – gcamp

+3

En retrospectiva, se agregó a Mac en 10.7, un par de meses después de los comentarios anteriores. – Tommy

6

que haría uso de este RegexKitLite:

#import "RegExKitLite.h" 

... 

NSString * urlString = @"blah blah blah http://www.google.com blah blah blah http://www.stackoverflow.com blah blah balh http://www.apple.com"; 
NSArray *urls = [urlString componentsMatchedByRegex:@"http://[^\\s]*"]; 
NSLog(@"urls: %@", urls); 

Lienzo:

urls: (
    "http://www.google.com", 
    "http://www.stackoverflow.com", 
    "http://www.apple.com" 
) 

(Por supuesto, la expresión regular que he usado para las direcciones URL no se ha simplificado, pero se entiende la idea.)

-1

Esta es la mejor manera de extraer enlace URL.

NSString *url_ = @"dkc://name.com:8080/123;param?id=123&pass=2#fragment"; 

NSURL *url = [NSURL URLWithString:url_]; 

NSLog(@"scheme: %@", [url scheme]); 

NSLog(@"host: %@", [url host]); 

NSLog(@"port: %@", [url port]); 

NSLog(@"path: %@", [url path]); 

NSLog(@"path components: %@", [url pathComponents]); 

NSLog(@"parameterString: %@", [url parameterString]); 

NSLog(@"query: %@", [url query]); 

NSLog(@"fragment: %@", [url fragment]); 

de salida:

esquema: dkc

host: name.com

puerto: 8080

ruta:/12345

componentes de la ruta: ( "/", 123) parameterString: param

consulta: id = 1 & pass = 2

fragmento: fragmento

Cuestiones relacionadas