我尝试从facebook网址解析照片ID,例如,
我的正则表达式是@"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]+)"
(注意我将\?
更改为.
)
它完美无缺。
虽然这是可以接受的,但我想知道为什么\?
在这里不起作用。有专家吗? : - )
答案 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]];
}