iPhone为GET参数解析网址

时间:2010-02-11 10:28:00

标签: iphone string

我有一个从解析xml站点获得的字符串。

http://www.arijasoft.com/givemesomthing.php?a=3434&b=435edsf&c=500

我想要一个能够解析c值的NSString函数。 是否有默认功能或我必须手动编写。

4 个答案:

答案 0 :(得分:22)

您可以通过RegExKit Lite使用正则表达式: http://regexkit.sourceforge.net/RegexKitLite/

或者你可以将字符串分成组件(这不太好):

NSString *url=@"http://www.arijasoft.com/givemesomthing.php?a=3434&b=435edsf&c=500";
NSArray *comp1 = [url componentsSeparatedByString:@"?"];
NSString *query = [comp1 lastObject];
NSArray *queryElements = [query componentsSeparatedByString:@"&"];
for (NSString *element in queryElements) {
    NSArray *keyVal = [element componentsSeparatedByString:@"="];
    if (keyVal.count > 0) {
       NSString *variableKey = [keyVal objectAtIndex:0];
       NSString *value = (keyVal.count == 2) ? [keyVal lastObject] : nil;
    }
}

答案 1 :(得分:6)

我创建了一个使用NSScanner为您解析的类,作为几天前same question的答案。您可能会发现它很有用。

您可以轻松使用它:

    URLParser *parser = [[[URLParser alloc] initWithURLString:@"http://www.arijasoft.com/givemesomthing.php?a=3434&b=435edsf&c=500"] autorelease];
    NSString *c = [parser valueForVariable:@"c"];   //c=500

答案 2 :(得分:0)

尝试以下方法:

NSURL *url = [NSURL URLWithString:@"http://www.arijasoft.com/givemesomthing.php?a=3434&b=435edsf&c=500"];
NSMutableString *parameterString = [NSMutableString stringWithFormat:@"{%@;}",[url parameterString]];
[parameterString replaceOccurrencesOfString:@"&" withString:@";"];
// Convert string into Dictionary
NSPropertyListFormat format;
NSString *error;    
NSDictionary *paramDict = [NSPropertyListSerialization propertyListFromData:[parameterString dataUsingEncoding:NSUTF8StringEncoding] mutabilityOption: NSPropertyListImmutable format:&format errorDescription:&error];

// Now take the parameter you want
NSString *value = [paramDict valueForKey:@"c"];

答案 3 :(得分:0)

以下是使用NSURLComponentsNSURLQueryItem类的原生iOS方法:

NSString *theURLString = @"http://www.arijasoft.com/givemesomthing.php?a=3434&b=435edsf&c=500";    
NSArray<NSURLQueryItem *> *theQueryItemsArray = [NSURLComponents componentsWithString:theURLString].queryItems;
for (NSURLQueryItem *theQueryItem in theQueryItemsArray)
{
    NSLog(@"%@ %@", theQueryItem.name, theQueryItem.value);
}