Foros del Web » Programando para Internet » PHP »

ayuda con funciones para expresiones regulares

Estas en el tema de ayuda con funciones para expresiones regulares en el foro de PHP en Foros del Web. Hola gente, el tema de las expresiones regulares me lleva dando dolor de cabeza meses , siempre que intento hacer cualquier chuminada tengo que volver ...
  #1 (permalink)  
Antiguo 08/05/2010, 06:00
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 9 meses
Puntos: 8
ayuda con funciones para expresiones regulares

Hola gente, el tema de las expresiones regulares me lleva dando dolor de cabeza meses , siempre que intento hacer cualquier chuminada tengo que volver a "reaprender" como hacerlo.
El tema es que quiero sacar de una página todos los enlaces que contengan el string www.laurlquesea.com pero no me sale.
Estoy haciéndolo de esta forma:

nota: $url contiene en cada momento una url de la página (no he pegado todo el código para que no ocupe demasiado, pero esto ya está comprobado por mi con un var_dump($url) de que llegan correctamente .

Código:
$patron="|laurlquesea|";

 if (preg_match_all($patron, $url,$coincidencias) ) {
	  
	   $mis_links[]=$url;  
var_dump($mis_links);
NO DEVUELVE las urls que quiero , Pero curiosamente si me devuelve los links de este tipo:
http://www.unaurl.com/lista/equipo/laurlquese/0/

Es decir las url que contienen el patrón definido:laurlquese , si las devuelve , pero si tienen las www y el .com ya no , he probado poniendo como patrón esto:
www.laurlquese.com pero ahora no me devuelve ninguna url ¿alguna idea?.

Mil gracias de antemano.
__________________
Videotutoriales de Drupal
  #2 (permalink)  
Antiguo 08/05/2010, 09:12
Avatar de spider_boy  
Fecha de Ingreso: diciembre-2003
Ubicación: Chile
Mensajes: 1.855
Antigüedad: 20 años, 4 meses
Puntos: 89
Respuesta: ayuda con funciones para expresiones regulares

Si pones directamente la url, tendrás que escapar los caracteres que pueden ser usados de otras maneras dentro de la expresión, es decir, por ejemplo, el punto coincide con cualquier caracter. Así que como tú buscas un punto dentro de la cadena, debes escaparlo.

Código PHP:
$url "hola www.laurlquesea.com si, y ademas laurlquesea";
$patron="/(?:www\.)?laurlquesea(?:\.com)?/";
 
$mis_links = array();
 if (
preg_match_all($patron$url,$coincidencias) ) {
       
$mis_links=$coincidencias;
           
print_r($mis_links);

Eso te devolverá www.laurlquesea.com y laurlquesea. Estudia las expresiones regulares hasta que mueras, así lograrás aprenderlas bien .

PD : Te recomiendo que leas este aporte por pateketrueke : http://www.forosdelweb.com/f18/aport...s-pcre-646110/
__________________
Nunca te olvidaré mi negra hermosa. Te extraño demasiado.
  #3 (permalink)  
Antiguo 08/05/2010, 09:26
Avatar de Dundee  
Fecha de Ingreso: junio-2002
Ubicación: El Médano
Mensajes: 1.310
Antigüedad: 21 años, 9 meses
Puntos: 8
Respuesta: ayuda con funciones para expresiones regulares

Cita:
Iniciado por spider_boy Ver Mensaje
y laurlquesea. Estudia las expresiones regulares hasta que mueras, así lograrás aprenderlas bien .

PD : Te recomiendo que leas este aporte por pateketrueke : http://www.forosdelweb.com/f18/aport...s-pcre-646110/
Si, la verdad que voy a estudiármelas bien porque me están haciendo perder mucho tiempo cada vez que las necesito.

Viendo el link que me has pasado me surgen dudas, en cocreto no entiendo en absoluto que quiere decir esto:
(?:) No captura subpatron - ((?:foo|fu)bar) captura foobar o fubar sin que foo o fu se capture como subpatron
No entiendo a que se refiere con eso, ni que es foo|fu , en fin me suena a chino jejeje


Edito porque despúes de hacer varias pruebas , el resultado es exactamente el mismo si pongo:
$patron="/(?:www\.)?miurl(?:\.com)?/";
que
$patron="/miurl/";

Ambos patrones me devuelven las mismas urls.


Mil gracias por la ayuda (::
__________________
Videotutoriales de Drupal

Última edición por Dundee; 09/05/2010 a las 02:25

Etiquetas: expresiones, funciones, regulares
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 19:50.