Foros del Web » Programando para Internet » PHP »

Separar string en array expresion regular

Estas en el tema de Separar string en array expresion regular en el foro de PHP en Foros del Web. Hola estoy hace dos horas dandole vueltas a esta expresion regura para sacar lass variables de un string en un array: La expresion: ?api_version=4&hotels=[{"ta_id":97497,"partner_id":"229547","partner_url" :"http://partner.com/deeplink/to/229547"},{"ta_id":97832,"partner_id":"id34234","pa ...
  #1 (permalink)  
Antiguo 07/05/2014, 15:44
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 65
Antigüedad: 21 años
Puntos: 2
Separar string en array expresion regular

Hola estoy hace dos horas dandole vueltas a esta expresion regura para sacar lass variables de un string en un array:

La expresion:

?api_version=4&hotels=[{"ta_id":97497,"partner_id":"229547","partner_url" :"http://partner.com/deeplink/to/229547"},{"ta_id":97832,"partner_id":"id34234","pa rtner_url":"http://partner.com/deeplink/to/id34234"}]
&start_date=2013-07-01
&end_date=2013-07-03
&num_adults=2
&num_rooms=1
&lang=en_US
&currency=USD
&user_country=US
&device_type=d
&query_key=6167a22d1f87d2028bf60a8e5e27afa7_191_13 60299600000_2_2

mi sentencia:

$keywords = preg_split("/[^a-zA-Z0-9_.\/]+/", $_POST[parametros]);
print_r($keywords);

Obtengo:

Array ( [0] => [1] => api_version [2] => 4 [3] => hotels [4] => ta_id [5] => 97497 [6] => partner_id [7] => 229547 [8] => partner_url [9] => http [10] => //partner.com/deeplink/to/229547 [11] => ta_id [12] => 97832 [13] => partner_id [14] => id34234 [15] => partner_url [16] => http [17] => //partner.com/deeplink/to/id34234 [18] => start_date [19] => 2013 [20] => 07 [21] => 01 [22] => end_date [23] => 2013 [24] => 07 [25] => 03 [26] => num_adults [27] => 2 [28] => num_rooms [29] => 1 [30] => lang [31] => en_US [32] => currency [33] => USD [34] => user_country [35] => US [36] => device_type [37] => d [38] => query_key [39] => 6167a22d1f87d2028bf60a8e5e27afa7_191_1360299600000 _2_2 )

Errores:

La posicion [0] siempre me aparece no se porque.
las posiones [9] y [10] me deberian aparecer enlazadas asi http://partner.com/deeplink/to/id34234

Llevo ya dos horas con esto y no consigo dar con la buena expresion....

por cierto la posicion [3] sobraria es decir "hotels" no aporta nada puedo prescindir de el aunque tampoco se como.

Gracias de anttemamo.
  #2 (permalink)  
Antiguo 07/05/2014, 23:05
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Separar string en array expresion regular

En primer lugar no necesitas expresiones regulares, necesitas parsear la URL tal cual y extraer sus parámetros.

Lo importante es que todo lo que tienes son formatos estándar, variables en una URL y además un objeto JSON ahí dentro.

Cita:
[{"ta_id":97497,"partner_id":"229547","partner_u rl" :"http://partner.com/deeplink/to/229547"},{"ta_id":97832,"partner_id":"id34234","pa rtner_url":"http://partner.com/deeplink/to/id34234"}]
Revisa parse_url() en el manual para que entiendas como obtener dichos parámetros iniciales, después con json_decode() conviertes dicho JSON a una estructura en PHP.

Cita:
Llevo ya dos horas con esto y no consigo dar con la buena expresion....
Ese es precisamente tu problema: ¿quién te ha dicho que es la única solución posible?

La regla de oro de RegExp es "si lo puedes resolver sin usar RegExp entonces no uses RegExp" y claramente los árboles te impiden ver el bosque, así no vas a llegar lejos.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 08/05/2014, 02:57
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 65
Antigüedad: 21 años
Puntos: 2
Respuesta: Separar string en array expresion regular

Hola.

Gracias por la orientacion ya habia intentado por esa via pero cuando recibo el "objeto" hotels la composicion es esta:

[{"ta_id":97497,"partner_id":"229547","partner_url" :"http://partner.com/deeplink/to/229547"},{"ta_id":97832,"partner_id":"id34234","pa rtner_url":"http://partner.com/deeplink/to/id34234"}]

Si utilizo json_decode con cada uno de las llaves {} funciona perfectamente pero con le esctructura multiple ... [{},{}].... me da error constantemente por eso decidi inentar con expresiones regulares.

No utilizo el parse_url pues los valores me vienen por post, pero esa parte ya lma tengo resuelta, solo me falta poder "explotar" en variable el "objeto" hotels= [{"ta_id":97497,"partner_id":"229547","partner_url" :"http://partner.com/deeplink/to/229547"},{"ta_id":97832,"partner_id":"id34234","pa rtner_url":"http://partner.com/deeplink/to/id34234"}]

para poder hacer la consulta correspondiente en la base de datos.

Gracias si podeis volver a orientarme......
  #4 (permalink)  
Antiguo 08/05/2014, 06:49
 
Fecha de Ingreso: abril-2014
Ubicación: Almería
Mensajes: 58
Antigüedad: 10 años
Puntos: 2
Respuesta: Separar string en array expresion regular

Si lo que quieres es sacar las variables... ¿Por qué no usas multiexplode?

Código PHP:
$text "here is a sample: this text, and this will be exploded. this also | this one too :)";
$exploded multiexplode(array(",",".","|",":"),$text); 
  #5 (permalink)  
Antiguo 08/05/2014, 08:51
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 1 mes
Puntos: 292
Respuesta: Separar string en array expresion regular

json_decode() ?

http://www.php.net/manual/en/function.json-decode.php

--
Cita:
Iniciado por milotower Ver Mensaje
Si lo que quieres es sacar las variables... ¿Por qué no usas multiexplode?
Esa funcion no es nativa de PHP, si la vio en algun otro lado es otra cosa
__________________
Salu2!
  #6 (permalink)  
Antiguo 08/05/2014, 11:15
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Separar string en array expresion regular

Cita:
Iniciado por dunblanco Ver Mensaje
[...] Si utilizo json_decode con cada uno de las llaves {} funciona perfectamente pero con le esctructura multiple ... [{},{}].... me da error constantemente por eso decidi inentar con expresiones regulares. [...]
Tal vez será que no has usado bien dicha función, a mi me va perfectamente:

Código PHP:
Ver original
  1. $data = '[{"ta_id":97497,"partner_id":"229547","partner_url" :"http://partner.com/deeplink/to/229547"},{"ta_id":97832,"partner_id":"id34234","pa rtner_url":"http://partner.com/deeplink/to/id34234"}]';
  2.  
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 09/05/2014, 04:09
 
Fecha de Ingreso: abril-2014
Ubicación: Almería
Mensajes: 58
Antigüedad: 10 años
Puntos: 2
Respuesta: Separar string en array expresion regular

Cita:
Iniciado por Italico76 Ver Mensaje
Esa funcion no es nativa de PHP, si la vio en [URL="http://snipplr.com/view/38994/multi-exploding-a-string/"]algun otro lado[/URL] es otra cosa
Es verdad, no es nativa de PHP, la vi en: [URL="http://es1.php.net/explode"]http://es1.php.net/explode[/URL]

Se indica la fuente: " php at metehanarslan dot com"

De todas formas, para lo que quiere el compañero va perfecta.
  #8 (permalink)  
Antiguo 12/05/2014, 13:50
 
Fecha de Ingreso: abril-2003
Ubicación: Madrid
Mensajes: 65
Antigüedad: 21 años
Puntos: 2
Respuesta: Separar string en array expresion regular

Pues tienes razon "pateketrueke" funciona..... lo que no se es como acceder al contenido con un foreach anidado...... eso es lo que me esta dando error...

pero estoy en ello, espero resolverlo.

Gracias
  #9 (permalink)  
Antiguo 12/05/2014, 15:22
Avatar de h2swider  
Fecha de Ingreso: julio-2007
Ubicación: Ciudad de Buenos Aires
Mensajes: 932
Antigüedad: 16 años, 9 meses
Puntos: 194
Respuesta: Separar string en array expresion regular

este es tu problema? :/

Código PHP:
Ver original
  1. foreach ($json as $element) {
  2.  
  3.     echo $element->ta_id;
  4. }

O para recorrerlo completo sin conocer los campos

Código PHP:
Ver original
  1. foreach ($json as $element) {
  2.    
  3.     foreach($element as $key => $value){
  4.        
  5.         echo $key.':'.$value.'<br/>';
  6.     }
  7. }
__________________
Codifica siempre como si la persona que finalmente mantedra tu código sea un psicópata violento que sabe donde vives

Última edición por h2swider; 12/05/2014 a las 15:29

Etiquetas: expresion, regular, string, variable
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:19.