2012-04-12 3 views
2

Я пытаюсь разобрать идентификатор фотографии из facebook URL, например,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