Foros del Web » Programando para Internet » PHP »

Extraño error con preg_match

Estas en el tema de Extraño error con preg_match en el foro de PHP en Foros del Web. Hola a todos, tengo un problema con preg_match. O mas bien no es un problema porque me da un error, pero no impide que el ...
  #1 (permalink)  
Antiguo 20/10/2011, 12:46
 
Fecha de Ingreso: febrero-2011
Mensajes: 78
Antigüedad: 13 años, 2 meses
Puntos: 0
Extraño error con preg_match

Hola a todos, tengo un problema con preg_match. O mas bien no es un problema porque me da un error, pero no impide que el programa se ejecute y funcione a la perfección... Así que estoy aquí para preguntar el porqué de este error, para saber cómo quitarlo.
Explico primero, pongo código después:
estoy recolectando información de una página de hoteles, primero me conecto, luego hago una serie de preg_match con expresiones regulares y por último muestro en pantalla. Las preg_match van dentro de un foreach, con un contador que se incrementa ya que son varias las posiciones del array que quiero llenar.
Mostrarlo lo muestra y lo hace todo a la perfección excepto que me da un error de lo más raro y me gustaria quitarlo.
Pongo código:



preg_match('#<div class="hotel-location-information">([^<]+)<em>(.+)</em>#si',$hotel,$direccion);
$nombreHotel[$c]['Direccion']=$direccion[1].' '.$direccion[2];

//hago mi preg_match y lo meto todo en $direccion
//Despues concateno $direccion[1] y $direccion[2] ya que son distintos resultados pero
//quiero que vayan juntos. Meto ambos resultados en la variable $nombreHotel en una
//misma posición, para que luego se muestren juntos.

obviamente aqui acabaria el bulce, $c se incrementaria y despues vendría el print_r pero todo eso no hace falta ponerlo.
Ahora vamos al navegador, resfresco y se muestra todo perfectamente pero estos son los mensajes de error que me aparecen:

<b>Notice</b>: Undefined offset: 1 in <b>/Applications/MAMP/htdocs/regex/sourceCode4.php</b> on line <b>34</b><br />
<br />
<b>Notice</b>: Undefined offset: 2 in <b>/Applications/MAMP/htdocs/regex/sourceCode4.php</b> on line <b>34</b><br />

La línea 34 es esta:
$nombreHotel[$c]['Direccion']=$direccion[1].' '.$direccion[2];


Alguien sabe porque me da este error? el programa funciona bien y la información se muestra bien, pero me gustaría poder quitar este error. Thanks
  #2 (permalink)  
Antiguo 20/10/2011, 13:06
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Extraño error con preg_match

Esos errores son porque no está capturando la expresión regular. $direccion es un array y los errores dicen que no están definidos los índices 1 y 2. ¿Te funciona aveces o siempre te da error?

Si puedes coloca una parte de lo que estás intentando capturar en ese código. Saludos.
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP
  #3 (permalink)  
Antiguo 20/10/2011, 13:44
 
Fecha de Ingreso: julio-2005
Mensajes: 310
Antigüedad: 18 años, 9 meses
Puntos: 36
Respuesta: Extraño error con preg_match

Hola

Como dice andresdzphp está claro que la expresión regular o bien no está bien construida o bien no tienes en cuenta que puede darse el caso que no se encuentren coincidencias con el patrón dado. Si crees que está bien construida entonces deberás controlar cuando no se encuentran coincidencias:

Código PHP:
if (preg_match('#<div class="hotel-location-information">([^<]+)<em>(.+) </em>#si',$hotel,$direccion) ) {
      
$nombreHotel[$c]['Direccion']=$direccion[1].' '.$direccion[2];

Haz un print_r($direccion) para ver que tienes ahí metido. A mi me da que algo falla en la construcción de la expresión regular.

Saludos.
  #4 (permalink)  
Antiguo 20/10/2011, 14:40
 
Fecha de Ingreso: febrero-2011
Mensajes: 78
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Extraño error con preg_match

En efecto creo que tengo que controlar el caso en el que esté vacía ya que no en todos los casos lo está pero creo que la expresión regular está bien. Probaré con isset a ver.
  #5 (permalink)  
Antiguo 20/10/2011, 14:52
 
Fecha de Ingreso: febrero-2011
Mensajes: 78
Antigüedad: 13 años, 2 meses
Puntos: 0
Respuesta: Extraño error con preg_match

Cita:
Iniciado por andresdzphp Ver Mensaje
Esos errores son porque no está capturando la expresión regular. $direccion es un array y los errores dicen que no están definidos los índices 1 y 2. ¿Te funciona aveces o siempre te da error?

Si puedes coloca una parte de lo que estás intentando capturar en ese código. Saludos.

Es exactamente como tu dices, no da siempre el error, luego debe de ser porque no está capturando la expresion regular.
Ahí pongo el código html de lo que intento capturar, obviamente lo que quiero coger de ahí es la dirección completa, incluido el or:

<div class="hotel-location-information">

42 - 46 Chiswell Street Chiswell Street, London | <em>Ciudad</em>

</div>

Y aquí la expresión regular:

preg_match('#<div class="hotel-location-information">([^<]+)<em>(.+)</em>#si',$hotel,$direccion);


Edito: Ya lo he conseguido con sizeof, era controlar el caso en que el array estuviera vacio. Thanks a todos los que habéis posteado !

Última edición por tabelor; 20/10/2011 a las 15:10
  #6 (permalink)  
Antiguo 20/10/2011, 15:29
 
Fecha de Ingreso: julio-2005
Mensajes: 310
Antigüedad: 18 años, 9 meses
Puntos: 36
Respuesta: Extraño error con preg_match

Hola

La próxima vez mira la clase DOMDocument. Yo siempre la suele preferir para manipular datos contenidos entre código web. Se aprende a utilizar rápido y una vez que sabes creo que es mucho más sencillo y da menos dolores de cabeza.

Saludos.

Etiquetas: extraño, variables
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 22:49.