2012-04-12 55 views
2

我嘗試解析帶有照片的身份證了Facebook網址,例如,NSRegularExpression不工作

https://www.facebook.com/photo.php?fbid=267217740038587&set=a.207272412699787.48907.100002510899673&type=1

我的正則表達式是@"https?:\/\/(www\.)?facebook\.com\/photo\.php\?fbid=([0-9]+)"

我與外部工具RegExhibit測試這一點 - http://homepage.mac.com/roger_jolly/software/它似乎工作正常。

但是它在XCode中不起作用。我試圖調試,並且這個問題似乎是在photo\.php之後的\?。當我將其更改爲

@"https?:\/\/(www\.)?facebook\.com\/photo\.php.fbid=([0-9]+)"(注意我改變\?.

它完美的作品。

雖然這是可以接受的,但我想知道爲什麼\?在這裏不起作用。任何專家? :-)

回答

4

我不知道,但也許是反斜槓\都正被泄露在的NSString本身有關的下列字符時,它被解析。例如,

NSLog(@"https?:\/\/(www\.)?facebook\.com\/photo\.php\?fbid=([0-9]+)"); 

實際打印https?://(www.)?facebook.com/photo.php?fbid=([0-9]+)這要是再作爲自己的正則表達式將執行你所描述的方式處理(如果你更換?.不執行半正常)

所以,我猜測它可以正常工作,您需要改爲@"https?:\\/\\/(www\\.)?facebook\\.com\\/photo\\.php\\?fbid=([0-9]+)"

0

你可以試試這個:

NSString *query = @"parameter=2&secondparameter=3"; // replace this with [url query]; 
NSArray *components = [query componentsSeparatedByString:@"&"]; 
NSMutableDictionary *parameters = [[NSMutableDictionary alloc] init]; 
for (NSString *component in components) { 
    [parameters setObject:[[component componentsSeparatedByString:@"="] objectAtIndex:0] forKey:[[component componentsSeparatedByString:@"="] objectAtIndex:1]]; 
} 
+0

是的,我知道這個選項。就像我說的那樣,修改後的正則表達式工作得很好,但我想了解原始正則表達式失敗的原因。謝謝! – jasondinh 2012-04-12 06:46:11