Foros del Web » Programando para Internet » PHP »

Consulta sobre Expresiones regulares

Estas en el tema de Consulta sobre Expresiones regulares en el foro de PHP en Foros del Web. Hola amigos, les comento mi problema, voy a obtener links ( por ejemplo <li><a href ='\Forosdelweb.com'>) con el siguiente script que pude armar recompilando informacion ...
  #1 (permalink)  
Antiguo 18/06/2007, 01:29
 
Fecha de Ingreso: mayo-2005
Mensajes: 257
Antigüedad: 18 años, 11 meses
Puntos: 1
Exclamación Consulta sobre Expresiones regulares

Hola amigos, les comento mi problema, voy a obtener links ( por ejemplo
<li><a href ='\Forosdelweb.com'>)

con el siguiente script que pude armar recompilando informacion de este sitio :
Código PHP:

$regexp 
"|<li><a href=\'(.*?)'>|is"
$encontrado preg_match_all ($regexp$datos$emparejadosPREG_SET_ORDER);
   
   
$total =  count ($emparejados);
   for (
$i=0;$i<$total;$i++)
   {
      echo 
$emparejados[$i][1];
   } 
Ahora bien, con esto puedo mostrar todo lo que concuerda con la expresion regular, pero hay links que tienen en ves de que empiezen con <li> empiezan con <li class='algo'>. No puedo hacer andar el script con este caso. He probado poniendo "?" pero nada. Me pueden dar el ejemplo de la expresion regular? Este script esta bien armado? Estoy perdido.

Desde ya muchas gracias por su atencion.


Gabriel
Argentina
  #2 (permalink)  
Antiguo 18/06/2007, 07:49
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: Consulta sobre Expresiones regulares

¿y por qué pedir que estén dentro de una lista? La lista no es parte del enlace...
Además, si estás buscando cualquier enlace, lo que deberías poner es
<a href=('|")([^'"]*?)('|")>

Es decir, buscar una cadena que comience con " o ' (debería ser siempre ", pero bueno, se permite también ' ), luego busca cualquier caracter que NO sea una comilla, y luego otra vez una comilla simple o doble.

Creo que no es necesario explicar que las comillas dentro del patrón tienen que ir escapadas para que PHP reconozca correctamente la cadena.

Para evitar casos como
a class="" href="..."

bastaría con agregar otro

(.*?)

antes de la parte del href. ¡Cuidado con los espacios! No es lo mismo

a href=""

que

a href=""


Saludos.
  #3 (permalink)  
Antiguo 25/07/2007, 13:30
 
Fecha de Ingreso: noviembre-2002
Mensajes: 46
Antigüedad: 21 años, 5 meses
Puntos: 0
Re: Consulta sobre Expresiones regulares

Justamente estoy buscando un patron para encontrar link dentro de un codigo HTML. Probe este que propones, pero me sigue pasando que no me encuentra nada, o todo mejor dicho. Le paso un codigo HTML a la funcion que busca los links y me devuelve el codigo completo. No se como hacerlo :(

function link_ext ($codigo, $dominio) {

$patron1 = "^<a href=?>$";
$patron = "<a href=('|\")([^\'\"]*?)(\'|\")>";
$urls = split('$patron',$codigo);
return $urls;

}

Alguien puede ayudarme?
Gracias
  #4 (permalink)  
Antiguo 25/07/2007, 14:27
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Re: Consulta sobre Expresiones regulares

urls = split('$patron',$codigo)

'$patron' no es lo que creés...

probá

echo '$patron'

y te vas a dar cuenta (probalo así como lo escribiste, con las comillas simples)


-----
Podría ser un problema con las barras de escape de las comillas, estás usando \' cuando no lo necesitás, porque la cadena está delimitada por comillas dobles.

Para probar si es esto, usá la sintaxis HEREDOC para crear el patrón:

$patron = <<<TXT
<a href=('|")([^'"]*?)('|")>
TXT;

y luego split(trim($patron), $codigo);

(el trim es para eliminar los saltos de línea introducidos antes y después de los TXT)


Si así te funciona, el problema está en las barras.


Saludos.

Última edición por AlvaroG; 25/07/2007 a las 18:53
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 21:09.