Mit NSRegularExpression zum extrahieren von URLs auf dem iPhone
Ich bin mit dem folgenden code auf mein iPhone-app, entnommen hier zum extrahieren der URLs aus gestreift .html-code.
Ich bin nur in der Lage, extrahieren Sie die erste URL, aber ich brauche ein array mit alle URLs. Meine NSArray ist nicht die Rückkehr NSStrings für jede URL, aber die Objekte der Beschreibungen nur.
Wie mache ich meine arrayOfAllMatches
Gegenzug alle URLs, wie NSStrings?
-(NSArray *)stripOutHttp:(NSString *)httpLine {
//Setup an NSError object to catch any failures
NSError *error = NULL;
//create the NSRegularExpression object and initialize it with a pattern
//the pattern will match any http or https url, with option case insensitive
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"http?://([-\\w\\.]+)+(:\\d+)?(/([\\w/_\\.]*(\\?\\S+)?)?)?" options:NSRegularExpressionCaseInsensitive error:&error];
//create an NSRange object using our regex object for the first match in the string httpline
NSRange rangeOfFirstMatch = [regex rangeOfFirstMatchInString:httpLine options:0 range:NSMakeRange(0, [httpLine length])];
NSArray *arrayOfAllMatches = [regex matchesInString:httpLine options:0 range:NSMakeRange(0, [httpLine length])];
//check that our NSRange object is not equal to range of NSNotFound
if (!NSEqualRanges(rangeOfFirstMatch, NSMakeRange(NSNotFound, 0))) {
//Since we know that we found a match, get the substring from the parent string by using our NSRange object
NSString *substringForFirstMatch = [httpLine substringWithRange:rangeOfFirstMatch];
NSLog(@"Extracted URL: %@",substringForFirstMatch);
NSLog(@"All Extracted URLs: %@",arrayOfAllMatches);
//return all matching url strings
return arrayOfAllMatches;
}
return NULL;
}
Hier ist mein NSLog Ausgabe:
Extracted URL: http://example.com/myplayer
All Extracted URLs: (
"<NSExtendedRegularExpressionCheckingResult: 0x106ddb0>{728, 53}{<NSRegularExpression: 0x106bc30> http?://([-\\w\\.]+)+(:\\d+)?(/([\\w/_\\.]*(\\?\\S+)?)?)? 0x1}",
"<NSExtendedRegularExpressionCheckingResult: 0x106ddf0>{956, 66}{<NSRegularExpression: 0x106bc30> http?://([-\\w\\.]+)+(:\\d+)?(/([\\w/_\\.]*(\\?\\S+)?)?)? 0x1}",
"<NSExtendedRegularExpressionCheckingResult: 0x106de30>{1046, 63}{<NSRegularExpression: 0x106bc30> http?://([-\\w\\.]+)+(:\\d+)?(/([\\w/_\\.]*(\\?\\S+)?)?)? 0x1}",
"<NSExtendedRegularExpressionCheckingResult: 0x106de70>{1129, 67}{<NSRegularExpression: 0x106bc30> http?://([-\\w\\.]+)+(:\\d+)?(/([\\w/_\\.]*(\\?\\S+)?)?)? 0x1}"
)
InformationsquelleAutor Winston | 2012-03-06
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Methode
matchesInString:options:range:
gibt ein array vonNSTextCheckingResult
Objekte. Sie können fast enumeration iteriert durch das array, ziehen Sie den Teilstring von jedem Spiel von der original-Zeichenfolge, und fügen Sie den Teilstring in einem neuen array.Funktioniert schrecklich! Ist Es möglich die Titel aus, die nach der > <. wie ist die url <a href="Google" >google.com">Google</a> Sie bekommen konnte "Google"?
InformationsquelleAutor jonkroll
Versuchen NSDataDetector
InformationsquelleAutor rudensm
Mit
NSDataDetector
mit Swift :Ich glaube nicht, dass Sie benötigen . reportCompletion option, da Ihr nicht mit enumerateMatches(in:Optionen:Bereich:Einsatz:)
InformationsquelleAutor Victor Sigler
erhalten Sie alle links von einer bestimmten Zeichenfolge
InformationsquelleAutor Hossam Ghareeb
Ich fand mich so angewidert von der Komplexität dieser einfache Vorgang ("match ALLE substrings"), dass ich eine kleine Bibliothek, die ich bin demütig aufrufen Unsuck die fügt etwas Vernunft zu
NSRegularExpression
in form vonfrom
undallMatches
Methoden. Hier ist, wie Sie möchten, verwenden Sie:Bitte überprüfen Sie heraus die unsuck source-code auf github und sagen Sie mir, all die Dinge, die ich falsch gemacht habe 🙂
Beachten Sie, dass
(?i)
macht es groß-und Kleinschreibung, so brauchen Sie nicht, um anzugebenNSRegularExpressionCaseInsensitive
.InformationsquelleAutor AlexChaffee