텍스트 본문에서 URL을 찾는 알고리즘을 찾으려고합니다. 저는 현재 다음과 같은 코드가 (이 아래로 내 앉아 있었고 코드를 그것을 해킹 내가 더 나은 방법이 있어야한다 알고) :텍스트 본문에서 URL을 찾는 알고리즘 개선 - obj-c
statusText.text = @"http://google.com http://www.apple.com www.joshholat.com";
NSMutableArray *urlLocations = [[NSMutableArray alloc] init];
NSRange currentLocation = NSMakeRange(0, statusText.text.length);
for (int x = 0; x < statusText.text.length; x++) {
currentLocation = [[statusText.text substringFromIndex:(x + currentLocation.location)] rangeOfString:@"http://"];
if (currentLocation.location > statusText.text.length) break;
[urlLocations addObject:[NSNumber numberWithInt:(currentLocation.location + x)]];
}
currentLocation = NSMakeRange(0, statusText.text.length);
for (int x = 0; x < statusText.text.length; x++) {
currentLocation = [[statusText.text substringFromIndex:(x + currentLocation.location)] rangeOfString:@"http://www."];
if (currentLocation.location > statusText.text.length) break;
[urlLocations addObject:[NSNumber numberWithInt:(currentLocation.location + x)]];
}
currentLocation = NSMakeRange(0, statusText.text.length);
for (int x = 0; x < statusText.text.length; x++) {
currentLocation = [[statusText.text substringFromIndex:(x + currentLocation.location)] rangeOfString:@" www." options:NSLiteralSearch];
if (currentLocation.location > statusText.text.length) break;
[urlLocations addObject:[NSNumber numberWithInt:(currentLocation.location + 1 + x)]];
}
//Get rid of any duplicate locations
NSSet *uniqueElements = [NSSet setWithArray:urlLocations];
[urlLocations release];
NSArray *finalURLLocations = [[NSArray alloc] init];
finalURLLocations = [uniqueElements allObjects];
//Parse out the URLs of each of the locations
for (int x = 0; x < [finalURLLocations count]; x++) {
NSRange temp = [[statusText.text substringFromIndex:[[finalURLLocations objectAtIndex:x] intValue]] rangeOfString:@" "];
int length = temp.location + [[finalURLLocations objectAtIndex:x] intValue];
if (temp.location > statusText.text.length) length = statusText.text.length;
length = length - [[finalURLLocations objectAtIndex:x] intValue];
NSLog(@"URL: %@", [statusText.text substringWithRange:NSMakeRange([[finalURLLocations objectAtIndex:x] intValue], length)]);
}
는 정규 표현식의 사용을 통해 개선 될 수 같은 느낌을 또는 뭔가. 이 문제를 개선하는 데 큰 도움이 될 것입니다.
정확한 정규식 링크를 게시하려면 여기로 왔습니다. – extremeboredom
NSDataDetector 정확히 내가 뭘 찾고 있었는지, 그 덕분에 톤! 내 알고리즘을 10 줄의 코드가 마음에 들도록 할 수있었습니다. 그것이 존재한다는 것을 몰랐습니다. – joshholat