0

我需要解析以下格式的 URL:

http://www.example.com/?method=example.method&firstKey=firstValue&id=1893736&thirdKey=thirdValue

我只需要&id=1893736中的1893736的值。

我需要为我的 iPhone 项目在 Objective-C 中进行解析。我知道它必须与正则表达式有关。但我只是不知道该怎么做。

任何建议,将不胜感激。:)

4

4 回答 4

1

您不需要正则表达式。你可以试试这样的

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);
于 2012-08-28T14:19:06.083 回答
1

使用这个

.*/\?(?:\w*=[^&]*&)*?(?:id=([^&]*))(?:&\w*=[^&]*)*

并抓住第一组:\1。您将获得1893736.

简化

如果id只能由数字组成:

.*/\?(?:\w*=[^&]*&)*?(?:id=(\d*))(?:&\w*=[^&]*)*

如果您不关心捕获不感兴趣的组(在这种情况下使用 \3or ):id

.*/\?(\w*=.*?&)*?(id=(?<id>\d*))(&\w*=.*)*

更简单的版本(使用\3):

.*/\?(.*?=.*?&)*(id=(\d*))(&.*?=.*)*
于 2012-08-28T14:22:15.490 回答
1

不要使用正则表达式。用于NSURL可靠地提取查询字符串,然后使用此答案的代码来解析查询字符串。

于 2012-08-28T14:34:50.733 回答
0

您可以拆分 NSURL 实例的字符串表示,而不是使用正则表达式。在您的情况下,您可以通过附加符 (&) 拆分字符串,循环查找前缀 (id=) 的数组,并从索引 2 中获取子字符串(这是 = 结束的位置)。

于 2012-08-28T14:17:19.667 回答