2012-04-12 41 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