使用正则表达式解析URL

时间:2012-08-28 13:59:22

标签: iphone objective-c regex cocoa-touch

我需要按以下格式解析网址:

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

我需要的是& id = 1893736 1893736 的值。

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

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

4 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

使用this

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

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

简化

如果id只能由数字组成:

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

如果你不关心捕捉不感兴趣的群体(在这种情况下 use \3id):

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

More simpler 版本(使用\3):

.*/\?(.*?=.*?&)*(id=(\d*))(&.*?=.*)*

答案 2 :(得分:1)

不要使用正则表达式。使用NSURL可靠地提取查询字符串,然后使用use this answer's code来解析查询字符串。

答案 3 :(得分:0)

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