NSRegularExpression不起作用

时间:2012-04-12 06:19:17

标签: objective-c regex cocoa nsregularexpression

我尝试从facebook网址解析照片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]+)"(注意我将\?更改为.

它完美无缺。

虽然这是可以接受的,但我想知道为什么\?在这里不起作用。有专家吗? : - )

2 个答案:

答案 0 :(得分:4)

我不确定,但是当解析时,反斜杠\可能会转义NSString中相关的后续字符。例如,

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

实际打印https?://(www.)?facebook.com/photo.php?fbid=([0-9]+)如果被视为自己的正则表达式将执行您描述它的方式(并且如果用?替换.,则会执行半正确的<) / p>

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

答案 1 :(得分: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]];
}