2010-02-11 24 views
7

Tengo una cadena que se obtiene de analizar un sitio xml.url de análisis de iPhone para OBTENER los parámetros

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

Quiero tener una función NSString que pueda analizar el valor de c. ¿Hay una función predeterminada o tengo que escribirla manualmente?

+0

¿Qué quiere decir? – Zinc

Respuesta

22

Usted podría utilizar la expresión regular a través de RegExKit Lite: http://regexkit.sourceforge.net/RegexKitLite/

O puede separar la cadena en componentes (que es menos agradable):

NSString *[email protected]"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; 
    } 
} 
+0

Gracias ... Esto es lo que trato de usar. – Nareshkumar

+1

esto funciona hasta que el valor del parámetro contiene el carácter '=', como LptOaQ == Para ese uso, en cambio, 'NSString * value = [elemento substringFromIndex: [elemento rangeOfString: @" = "]. Location + 1]; NSString * variableKey = [element substringToIndex: [element rangeOfString: @ "="]. Location]; ' – jold

+0

NSString * query = [url query]; es un poco más limpio para usar luego se separa por "?" ... si el último objeto contiene un fragmento ("#fragmento"), el último objeto al separar por "&" no sería lo que está esperando. – whyoz

0

Pruebe lo siguiente:

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"]; 
+0

¡buena idea! muy agradable. – ZYiOS

6

Hice una clase que hace este análisis sintáctico para usted usando un NSScanner, como una respuesta al same question hace unos días. Tu podrias encontrar esto útil.

Se puede utilizar fácilmente como:

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 
+0

¡Gracias por compartir esto, funcionó como un encanto! – aumanets

Cuestiones relacionadas