我需要解析以下格式的 URL:
http://www.example.com/?method=example.method&firstKey=firstValue&id=1893736&thirdKey=thirdValue
我只需要&id=1893736中的1893736的值。
我需要为我的 iPhone 项目在 Objective-C 中进行解析。我知道它必须与正则表达式有关。但我只是不知道该怎么做。
任何建议,将不胜感激。:)
我需要解析以下格式的 URL:
http://www.example.com/?method=example.method&firstKey=firstValue&id=1893736&thirdKey=thirdValue
我只需要&id=1893736中的1893736的值。
我需要为我的 iPhone 项目在 Objective-C 中进行解析。我知道它必须与正则表达式有关。但我只是不知道该怎么做。
任何建议,将不胜感激。:)
您不需要正则表达式。你可以试试这样的
NSString *url = @"http://www.example.com/?method=example.method&firstKey=firstValue&id=1893736&thirdKey=thirdValue";
NSString *identifier = nil;
for (NSString *arg in [[[url pathComponents] lastObject] componentsSeparatedByString:@"&"]) {
if ([arg hasPrefix:@"id="]) {
identifier = [arg stringByReplacingOccurrencesOfString:@"id=" withString:@""];
}
}
NSLog(@"%@", identifier);
使用这个:
.*/\?(?:\w*=[^&]*&)*?(?:id=([^&]*))(?:&\w*=[^&]*)*
并抓住第一组:\1
。您将获得1893736
.
如果id
只能由数字组成:
.*/\?(?:\w*=[^&]*&)*?(?:id=(\d*))(?:&\w*=[^&]*)*
如果您不关心捕获不感兴趣的组(在这种情况下使用 \3
or ):id
.*/\?(\w*=.*?&)*?(id=(?<id>\d*))(&\w*=.*)*
更简单的版本(使用\3
):
.*/\?(.*?=.*?&)*(id=(\d*))(&.*?=.*)*
不要使用正则表达式。用于NSURL
可靠地提取查询字符串,然后使用此答案的代码来解析查询字符串。
您可以拆分 NSURL 实例的字符串表示,而不是使用正则表达式。在您的情况下,您可以通过附加符 (&) 拆分字符串,循环查找前缀 (id=) 的数组,并从索引 2 中获取子字符串(这是 = 结束的位置)。