Foros del Web » Programando para Internet » PHP »

Expresion regular

Estas en el tema de Expresion regular en el foro de PHP en Foros del Web. Buenas, me gustaria recuperar el enlace de esta cadena @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código HTML: Ver original [link]www.enlace.com[/link] Estoy probando con la siguiente expresion regular pero por ...
  #1 (permalink)  
Antiguo 27/08/2011, 02:37
 
Fecha de Ingreso: junio-2009
Mensajes: 309
Antigüedad: 14 años, 10 meses
Puntos: 5
Expresion regular

Buenas, me gustaria recuperar el enlace de esta cadena
Código HTML:
Ver original
  1. [link]www.enlace.com[/link]

Estoy probando con la siguiente expresion regular pero por los corcheter creo que falla :S

Código PHP:
Ver original
  1. $encontrado = preg_match_all('/[link](.*)[\/link]/', $mensaje, $resultados, PREG_SET_ORDER);
  2. if ($encontrado) {
  3.        
  4.         foreach ($resultados as $resultado) {
  5.            
  6.         }
  7.     }


Alguna idea?
  #2 (permalink)  
Antiguo 27/08/2011, 04:45
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Expresion regular

Coloca .*? a ver si con eso resuelves. La idea es que capture solo lo necesario.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 27/08/2011, 07:39
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Expresion regular

Escapa los corchetes con \
  #4 (permalink)  
Antiguo 27/08/2011, 08:50
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: Expresion regular

Todo lo que dicen los compañeros es cierto, así debe quedar:

Código PHP:
Ver original
  1. <?php
  2. $mensaje = 'Hola [link]www.enlace.com[/link] chau [link]www.google.com[/link] bye';
  3. $encontrado = preg_match_all('@\[link\](.*?)\[/link\]@i', $mensaje, $resultados, PREG_SET_ORDER);
  4.  
  5. if (($encontrado)) {
  6.     foreach ($resultados as $res) {
  7.         echo $res[1] . '<br />';
  8.     }
  9. }
Debes colocar .*? porque necesitas que coja desde la primera etiqueta [link] hasta la primera etiqueta [/link], de otro modo se iría desde la primera hasta el final de todo. Además debes escapar todos los metacaracteres ^ $ ( ) < > [ ] { \ | . * + ? entre otros y si usas como separadores el / lo debes escapar. 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
  #5 (permalink)  
Antiguo 28/08/2011, 20:15
 
Fecha de Ingreso: junio-2009
Mensajes: 309
Antigüedad: 14 años, 10 meses
Puntos: 5
Respuesta: Expresion regular

Muchas gracias, aunque no es como comentan aqui les dejo como quedó al final el script que seguro que a algun otro usuario le sirve:

Código PHP:
Ver original
  1. // Para la imagen
  2.         $mensaje = preg_replace('/\[img\](.*?)\[\/img\]/sim','<div class="contenidoExterno img"><span class="clip"></span><a href="\\1" target="_blank" rel="nofollow"><img src="\\1"></a></div>', $mensaje);
  3.         // Para el enlace
  4.         $mensaje = preg_replace('/\[url\](.*?)\[\/url\]/sim','<a href="\\1" target="_blank" rel="nofollow">\\1</a> ', $mensaje);
  5.  
  6.         // Para los emails
  7.         $mensaje = preg_replace('/([A-Z0-9._%-]+)@([A-Z0-9.-]+)\.([A-Z]{2,4})/sim','<img class="email" src="'.$w_dominio.'inc/email2img.php?textval=\\1||jeje||\\2.\\3&size=11&bgcolor=%23cccccc&textcolor=%23000000"> ', $mensaje);
  8.  
  9.         // Youtube
  10.         $mensaje = preg_replace("/\[video\](?:http:\/\/)?(www\.)?(youtube\.com\/watch\?v=)([a-zA-Z0-9_-]{0,})\[\/video\]/sim", '<div class="contenidoExterno"><span class="clip"></span><iframe width="560" height="345" src="http://www.youtube.com/embed/\\3?wmode=opaque" frameborder="0" allowfullscreen></iframe></div>', $mensaje);
  11.  
  12.         // Vimeo
  13.         $mensaje = preg_replace("/\[video\](http:\/\/)?(www\.)?vimeo\.com\/([a-zA-Z0-9_]{0,})\[\/video\]/sim", '<div class="contenidoExterno"><span class="clip"></span><iframe src="http://player.vimeo.com/video/\\3?title=0&amp;byline=0&amp;portrait=0" width="560" height="345" frameborder="0"></iframe></div>', $mensaje);
  14.  
  15.         // Megavideo
  16.         $mensaje = preg_replace("/\[video\](http:\/\/)?(www\.)?megavideo\.com\/\?v=([a-zA-Z0-9_]{0,})\[\/video\]/sim", '<div class="contenidoExterno"><span class="clip"></span><object width="560" height="345"><param name="movie" value="http://www.megavideo.com/v/\\3"></param><param name="wmode" value="opaque"></param><param name="allowFullScreen" value="true"><embed src="http://www.megavideo.com/v/\\3" type="application/x-shockwave-flash" allowfullscreen="true" wmode="opaque" width="560" height="345"></embed></object></div>', $mensaje);


Saludos y gracias!

Etiquetas: expresion, regular
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 17:13.