2013-11-29 6 views
0

Я пытаюсь найти конкретные строки URL из строки с именем «newString». Я использую следующий код для обнаружения ссылок и сохранения их в массиве под названием «matches». Конкретные строки Я интересуюсь расположен на спичках [1] индексе массива:Назначить строки по первому индексу NSArray To NSString

NSDataDetector* detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink error:nil]; 
NSArray* matches = [detector matchesInString:newString options:0 range:NSMakeRange(0, [newString length])]; 
NSLog(@"MATCHES %@", matches[1]); 

Как я могу назначить строки, расположенные в матчах [1] к NSString, так что я могу использовать его в дальнейшем в моей программе ?

+0

В чем проблема тогда ...? ** NSLog (@ "MATCHES% @", соответствует [1]); ** Если вы получаете журнал, то, что **% @ ** указывают ..? –

+0

@dasblinkenlight проблема с строкой кода, которую вы сказали, дает {426, 107} {здесь ссылка} в качестве вывода. – AJ112

+0

@KumarKl см. Комментарий выше – AJ112

ответ

0

NSString *stringYouWant = [matches objectAtIndex:1];

Или даже

NSString *stringYouWant = [[matches objectAtIndex:1] copy];

+0

, конечно, я пробовал это. Если i log, он дает результат: {426, 107} {вот ссылка} – AJ112

+0

Я хочу только часть ссылки не AJ112

+1

О, извините, я был немного преждевременным :-) см. IPatels. Он абсолютно прав. –

0

В коде

NSDataDetector *linkDetector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink error:nil]; 
NSArray *matches = [linkDetector matchesInString:string options:0 range:NSMakeRange(0, [string length])]; 
for (NSTextCheckingResult *match in matches) { 
    if ([match resultType] == NSTextCheckingTypeLink) { 
    NSURL *url = [match URL]; 
    NSLog(@"found URL: %@", url); 
    break; 
    } 
} 

Другой способ заключается в использовании NSRegularExpression.

NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"(?i)\\b((?:[a-z][\\w-]+:(?:/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}/)(?:[^\\s()<>]+|\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\))+(?:\\(([^\\s()<>]+|(\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:'\".,<>?«»“”‘’]))" options:NSRegularExpressionCaseInsensitive error:NULL]; 
NSString *match = [someString substringWithRange:[regex rangeOfFirstMatchInString:someString options:NSMatchingCompleted range:NSMakeRange(0, [someString length])]]; 
NSLog(@"%@", match); 
+0

первый код, который вы указали, не возвращает правильный URL. Он начинает давать мне ссылки в индексе 0, в то время как я хочу ссылки в индексе 1. Если я использую совпадения [1] вместо совпадений в строке (соответствие NSTextCheckingResult * в совпадениях), то он сбой. – AJ112

+0

и как я могу использовать код NSRegularExpression? Я пробовал код, который вы предоставили, и он возвращает «vertical-align: top» в журнале. Что делать сейчас? – AJ112

0

Использует ли одно из этих решений для вас? Вы попробовали другой матч (0, 2, 3, ...)? Вы также можете попробовать диапазон по другому индексу ...

NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeLink error:nil]; 
NSArray *matches = [detector matchesInString:newString options:0 range:NSMakeRange(0, [newString length])]; 
NSURL *urlYouWant = [[matches objectAtIndex:1] URL]; 
NSString *stringYouWant = [newString subStringWithRange:[[matches objectAtIndex:1] rangeAtIndex:1]]; 
Смежные вопросы