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]+)"

これを外部ツールRegExhibithttp://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]+)すると、それ自体の正規表現として扱われると、説明したとおりに実行されます(また、をに置き換える?と、半適切に実行されます.

だから、私はそれが正しく動作することを推測しています、@"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 に答える