Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSRegularExpression不工作_Objective C_Regex_Cocoa_Nsregularexpression - Fatal编程技术网

Objective c NSRegularExpression不工作

Objective c NSRegularExpression不工作,objective-c,regex,cocoa,nsregularexpression,Objective C,Regex,Cocoa,Nsregularexpression,我正在尝试从facebook url解析照片id,例如 我的正则表达式是@“https?:\/\/(www\)?facebook\.com\/photo\.php\?fbid=([0-9]+)” 我用一个外部工具RegExhibit对此进行了测试,它似乎运行良好 但是,它在XCode中不起作用。我试着调试,问题似乎是photo\.php之后的\?。当我把它改成 @“https?:\/\/(www\)?facebook\.com\/photo\.php.fbid=([0-9]+)”(注意我将\?

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

我的正则表达式是
@“https?:\/\/(www\)?facebook\.com\/photo\.php\?fbid=([0-9]+)”

我用一个外部工具
RegExhibit
对此进行了测试,它似乎运行良好

但是,它在XCode中不起作用。我试着调试,问题似乎是
photo\.php
之后的
\?
。当我把它改成

@“https?:\/\/(www\)?facebook\.com\/photo\.php.fbid=([0-9]+)”
(注意我将
\?
更改为

它工作得很好

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

您可以尝试以下方法:

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]];
}
您可以尝试以下方法:

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]];
}

我不确定,但在解析NSString时,反斜杠
\
可能会转义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]+)”

我不确定,但在解析NSString时,反斜杠
\
可能会转义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]+)”

是的,我知道这个选项。正如我所说,修改后的正则表达式工作得很好,但我想了解原始正则表达式失败的原因。谢谢是的,我知道这个选择。正如我所说,修改后的正则表达式工作得很好,但我想了解原始正则表达式失败的原因。谢谢