2

我正在尝试从 facebook url 中解析照片 id,例如,

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

2 回答 2

4

我不确定,但也许反斜杠\在解析时正在转义 NSString 本身中的相关后续字符。例如,

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

实际上打印https?://(www.)?facebook.com/photo.php?fbid=([0-9]+)which if then 视为它自己的正则表达式将按照您描述它的方式执行(如果您将 a 替换为?a ,则会半正确地执行.

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

于 2012-04-12T07:11:02.643 回答
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]];
}
于 2012-04-12T06:32:39.240 回答