Análisis de URL usando expresiones regulares
Frecuentes
Visto 804 veces
0
Necesito analizar una URL en el siguiente formato:
http://www.example.com/?method=example.method&firstKey=firstValue&id=1893736&thirdKey=thirdValue
Todo lo que necesito es el valor de 1893736 dentro de & id = 1893736.
Necesito hacer el análisis en Objective-C para mi proyecto de iPhone. Entiendo que debe tener algo que ver con la expresión regular. Pero no tengo ni idea de cómo hacerlo.
Cualquier sugerencia sera apreciada. :)
4 Respuestas
1
No necesitas una expresión regular para esto. Puedes intentar algo como esto
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);
Respondido 28 ago 12, 15:08
1
No uses expresiones regulares. Usar NSURL
para extraer de manera confiable la cadena de consulta y luego usa el código de esta respuesta para analizar la cadena de consulta.
contestado el 23 de mayo de 17 a las 13:05
1
Utilice las este:
.*/\?(?:\w*=[^&]*&)*?(?:id=([^&]*))(?:&\w*=[^&]*)*
Y grap primer grupo: \1
. obtendrás 1893736
.
Simplificación
Si id
puede constar de solo dígitos:
.*/\?(?:\w*=[^&]*&)*?(?:id=(\d*))(?:&\w*=[^&]*)*
Si no te importa captar grupos desinteresados (utilizan el \3
or id
en este caso):
.*/\?(\w*=.*?&)*?(id=(?<id>\d*))(&\w*=.*)*
más simple versión (uso \3
):
.*/\?(.*?=.*?&)*(id=(\d*))(&.*?=.*)*
Respondido 28 ago 12, 16:08
¿Por qué una expresión regular tan estricta? Seguramente algo como @".*id=(\\d*)"
sería adecuado? - Pablo.s
@ Paul.s Para asegurarse de que no coincida con otros parámetros. Por ejemplo: En una URL como http://www.example.com/?pid=1893736&id=123&cid=234
la expresión regular que sugirió coincidirá 234
. - mmdemirbas
Ok, entonces seguramente esto es aún mucho más sucinto y ahora trata ese caso. @".*&id=(\\d*)"
- Pablo.s
No, un ampersand antes id
no es necesario: http://www.example.com/?id=1893736
. Pero, si OP aprueba que el id
puede constar de solo dígitos, luego reemplazando id=([^&]*)
con id=(\d*)
simplifica mi expresión regular, como sugirió. - mmdemirbas
ok, [^&]*&
se puede simplificar a .*?&
. - mmdemirbas
0
En lugar de usar expresiones regulares, puede dividir la representación de cadena de su instancia de NSURL. En su caso, puede dividir la cadena por el appersand (&), recorrer la matriz en busca del prefijo (id=) y obtener la subcadena del índice 2 (que es donde termina =).
Respondido 28 ago 12, 15:08
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas iphone objective-c regex cocoa-touch or haz tu propia pregunta.
La URL no se abre correctamente... - Rajneesh071
Porque es solo un ejemplo. - mmdemirbas
¿Por qué razón necesitas expresiones regulares? puedes hacerlo con funciones simples como
lastIndexOf
,Substr
ySplit
- gaussblurinc