2012-11-15 61 views
1

我想在xcode中做一個基本的正則表達式,它不合作。ios NSRegularExpression麻煩

NSString *urlString = @"http://www.youtube.com/v/3uyaO745g0s?fs=1&hl=en_US"; 

NSError *error = nil; 
NSRegularExpression *regex = [NSRegularExpression regularExpressionWithPattern:@"/.*?v=(.*)&.*/" options:NSRegularExpressionCaseInsensitive error:&error]; 
NSTextCheckingResult *fmis = [regex firstMatchInString:urlString options:0 range:NSMakeRange(0, [urlString length])]; 

if(fmis) { 
    NSRange match = [fmis range]; 
    NSLog(@"%i", match.location); 
} 

本質上,我只是試圖吸取3uyaO745g0s出urlString。我認爲正則表達式是最好的方式?感謝您看我的問題。

**編輯**

有時網址看起來像這樣:http://www.youtube.com/watch?v=3uya0746g0s,我要捕捉的VID爲好。

+1

對於你的第二個例子,你可以通過像這樣['[[url查詢] componentsSeparatedByString:@「=」] lastObject]'來獲取它。請注意,如果你的查詢中有多個參數,你應該實現額外的邏輯來只抓取'v'的值......但你明白了......另外,RestKit有一個很好的類別來完成這個任務。在這裏瞭解更多=> http://restkit.org/api/0.10.3/Categories/NSString+RKAdditions.html – Alladinian

回答

3

我覺得它更容易創建一個NSURL對象,並讓它做它的魔力爲你:

NSString *urlString = @"http://www.youtube.com/v/3uyaO745g0s?fs=1&hl=en_US"; 
NSURL *url = [NSURL URLWithString:urlString]; 

// Since you're targeting the last component of the url 
NSString *myMatch = [url lastPathComponent]; //=> 3uyaO745g0s 

你可以找到更多關於如何訪問NSURL對象的不同部分here

1

有有很多類型的YouTube網址。 也許你可以試試這個

NSString *urlString = @"http://www.youtube.com/v/3uyaO745g0s?fs=1&hl=en_US"; 
NSString *regEx = @"[a-zA-Z0-9\\-\\_]{11}"; 
NSRange idRange = [urlString rangeOfString:regEx options:NSRegularExpressionSearch]; 
NSString *youtubeID = [urlString substringWithRange:idRange]; 

我發現這個正則表達式here。而且您不必使用NSRegularExpression進行簡單搜索:)

我認爲這是相當不錯的解決方案,但如果您想要更可靠的結果,請在該答案中嘗試另一個正則表達式。