Foros del Web » Programando para Internet » PHP »

Expresión regular para quitar urls

Estas en el tema de Expresión regular para quitar urls en el foro de PHP en Foros del Web. Hola, y gracias de antemano por la atención. Acabo de descubir qué es eso de la expresiones regulares y por muchas vueltas que le doy ...
  #1 (permalink)  
Antiguo 14/11/2010, 11:19
 
Fecha de Ingreso: noviembre-2010
Mensajes: 36
Antigüedad: 13 años, 5 meses
Puntos: 1
Expresión regular para quitar urls

Hola, y gracias de antemano por la atención.

Acabo de descubir qué es eso de la expresiones regulares y por muchas vueltas que le doy no consigo atinar con dos de ellas. Por favor, me sería de gran ayuda que alguien me echara un cable.

1. La primera expresión regular que necesito es para quitar las urls. Así, por ejemplo, si tuviera esta url "http://www.forosdelweb.com" quiero cambiarla por la palabra (enlace).

Con esta fórmula:

Código PHP:
$cadena preg_replace('/\<a(.*)\>(.*)\<\/a\>/i','',$cadena); 
quito las etiquetas html, pero yo lo que quiero quitar es la url... la expresióndebe ser algo así:

(http://)

pero eso sólo me quita lo que está escrito y lo que necesito es que quite toda la url...

2. La segunda es que me transforme las imágenes en otra palabra de reemplazo. Es decir, que cualquier palabra que termine en .jpg, .gif, .png, .jpeg se convierta en la palabra (imagen).

Muchísimas gracias de antemano por la atención.
  #2 (permalink)  
Antiguo 14/11/2010, 15:02
Avatar de hackjose  
Fecha de Ingreso: abril-2010
Ubicación: Edo Mexico
Mensajes: 1.178
Antigüedad: 14 años
Puntos: 131
Respuesta: Expresión regular para quitar urls

Código PHP:
Ver original
  1. $a="http://www.forosdelweb.com/f18";
  2. $b=substr($a,0,7); //esto te mostrara http://
  3. $c="algo.gif";
  4. $d=preg_replace("%^[a-zA-Z0-9]+(\.){1}(jpg|gif|png|jpeg){1}$%","imagen",$c); /* esto cambia cualquier  palabra con extencion .jpg .gif .png .jpeg a solo la palabra imagen si quieres mas extenciones solo agregalas en (jpg|gif|png|jpeg) por ejemplo (jpg|gif|png|jpeg|otra) acuerdate de poner la linea vertical "|" */
  5. //para que veas los resultados
  6. echo $b;
  7. echo "<br>";
  8. echo $d;
  #3 (permalink)  
Antiguo 14/11/2010, 15:44
 
Fecha de Ingreso: noviembre-2010
Mensajes: 36
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: Expresión regular para quitar urls

Muchas gracias por la atención, hackjose.

He probado a hacer lo que dices, pero no funciona. Me temo que me he explicado mal.

El problema es este

Tengo un web log (www.mmfilesi.com) donde quiero mostrar los últimos post de un foro (www.mmfilesi.com/taller). Más o menos, ya lo tengo. Los dos problemas que hay son que al mostrar el post si hay urls o imágenes se ve algo así de absurdo:

Cita:
marcos: Subido el de París, que la verdad es que me parece fascinante. http://www.google.es
en Re: El patrón de Marsella (TDM) || Sun, 14 Nov 2010 19:21:17 || ver +
-·-

marcos: La firma: faictaparis.jpg El reverso: reverso.jpg Ejemplo de cartas normales: ejemplosmenores.jpg...
en Re: Tarot de París || Sun, 14 Nov 2010 19:19:31 || ver +
Entonces, para que se vea bien y sólo seleccione texto legible, lo que necesito es un preg_replace que se cepille cualquier palabra que empiece por http:// y cualquier palabra que termine en .gif, .jpg, .jpeg, .png.

Gracias compai!
  #4 (permalink)  
Antiguo 14/11/2010, 16:16
Avatar de jaao_death  
Fecha de Ingreso: abril-2009
Ubicación: Murcia/españa
Mensajes: 229
Antigüedad: 15 años
Puntos: 6
Respuesta: Expresión regular para quitar urls

para cambiar las urls :

Código PHP:
$pattern "/(\\<a .*\\>).*(\\<\\/a\\>/";
$replacement "{$1}enlace{$2}"
y para las imágenes :

Código PHP:
$pattern "/\\S\\.(jpg|gif|png|jpeg)/";
$replacement "imagen"
esto último cambia literalmente el nombre de la imagen por imagen, espero que te sirva si no contacta con migo y te echaré un cable como pueda
__________________
Mucha seguridad nunca es suficiente.... Por una red segura
El señor ilustre obscurece nuestras mentes
Usas Linux? http://www.dudalibre.com/gnulinuxcounter
  #5 (permalink)  
Antiguo 14/11/2010, 16:36
Avatar de xcorpion  
Fecha de Ingreso: octubre-2003
Ubicación: m é x i c o
Mensajes: 676
Antigüedad: 20 años, 6 meses
Puntos: 4
Respuesta: Expresión regular para quitar urls

Yo lo haria asi:
$cadena = eregi_replace('href=([^ >]+)', 'href="#"' ,$cadena);
  #6 (permalink)  
Antiguo 14/11/2010, 16:42
Avatar de jaao_death  
Fecha de Ingreso: abril-2009
Ubicación: Murcia/españa
Mensajes: 229
Antigüedad: 15 años
Puntos: 6
Respuesta: Expresión regular para quitar urls

Cita:
Iniciado por xcorpion Ver Mensaje
Yo lo haria asi:
$cadena = eregi_replace('href=([^ >]+)', 'href="#"' ,$cadena);
primero, el patrón que tú usas cambia la URL, y por lo que entiendo ella quiere conservar la URL, solo quiere cambiar el nombre del enlace por último... o mejor léelo tú mismo (Warning).

http://php.net/manual/en/function.eregi-replace.php
__________________
Mucha seguridad nunca es suficiente.... Por una red segura
El señor ilustre obscurece nuestras mentes
Usas Linux? http://www.dudalibre.com/gnulinuxcounter
  #7 (permalink)  
Antiguo 14/11/2010, 16:50
Avatar de xcorpion  
Fecha de Ingreso: octubre-2003
Ubicación: m é x i c o
Mensajes: 676
Antigüedad: 20 años, 6 meses
Puntos: 4
Respuesta: Expresión regular para quitar urls

La solucion que propongo cambia esto:

<a href="http://www.forosdelweb.com/">Texto</a>

Por esto:

<a href="#">Texto</a>
  #8 (permalink)  
Antiguo 14/11/2010, 16:54
 
Fecha de Ingreso: noviembre-2010
Mensajes: 36
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: Expresión regular para quitar urls

MUCHÍSIMAS GRACIAS!!!!!!!!!!!!!!

Ya casi está... Entonces, con el de las imágenes se quita la terminación y la última letra, pero aún sigue quedando un cachito del texto.

Así, por ejemplo, en vez de

reverso.jpg
ejemplosmenores.jpg.

pone

reversimagen
ejemplosmenoreimagen

pero lo chachi sería que quitara toda la palabra (y la sustituyera por imagen).

En el de las URLs, en cambio, el server se pone chulo y me dice, de forma un tanto amenazadora, que:

Parse error: syntax error, unexpected T_LNUMBER, expecting T_VARIABLE or '$' in
  #9 (permalink)  
Antiguo 14/11/2010, 16:56
 
Fecha de Ingreso: noviembre-2010
Mensajes: 36
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: Expresión regular para quitar urls

Cita:
quiere conservar la URL, solo quiere cambiar el nombre del enlace por último
No, creo que me expliqué mal...

lo que necesito es que desaparezca cualquier palabra que empiece por http://www.

es decir, que desaparezcan todas las urls.

perdón!
  #10 (permalink)  
Antiguo 14/11/2010, 17:00
Avatar de xcorpion  
Fecha de Ingreso: octubre-2003
Ubicación: m é x i c o
Mensajes: 676
Antigüedad: 20 años, 6 meses
Puntos: 4
Respuesta: Expresión regular para quitar urls

Creo que esto podria servir:

$cadena = eregi_replace('https?:([^ >\"\']+)', '' ,$cadena);
  #11 (permalink)  
Antiguo 14/11/2010, 17:07
 
Fecha de Ingreso: noviembre-2010
Mensajes: 36
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: Expresión regular para quitar urls

SÍ!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Ya se cepilla las URLS



PERFECTO AMIGO!!!!!!!!!!!!!!!!!!!

Llevaba todo el día con esto.... jajajjaja.. stoy emocionado y todo.

MUCHÍSIMAS GRACIAS.

Ahora ya sólo falta el de las imágenes, formidable!!!!
  #12 (permalink)  
Antiguo 14/11/2010, 17:10
Avatar de jaao_death  
Fecha de Ingreso: abril-2009
Ubicación: Murcia/españa
Mensajes: 229
Antigüedad: 15 años
Puntos: 6
Respuesta: Expresión regular para quitar urls

Cita:
Iniciado por xcorpion Ver Mensaje
La solucion que propongo cambia esto:

<a href="http://www.forosdelweb.com/">Texto</a>

Por esto:

<a href="#">Texto</a>
esto... cambia la URL, o acaso ya cambió de nombre?, bueno también puede ser URI...

imágenes:


Código PHP:
$pattern "/\\S+\\.(jpg|gif|png|jpeg)/"// faltó el contador "+", sorry
$replacement "imagen"
Url:

Cita:
Iniciado por xcorpion Ver Mensaje
Creo que esto podria servir:

$cadena = eregi_replace('https?:([^ >\"\']+)', '' ,$cadena);
Haber, ya que veo que no entras, lo copio literalmente:

Cita:
Warning

This function has been DEPRECATED as of PHP 5.3.0. Relying on this feature is highly discouraged.
tradusco:

esta función es obsoleta desde PHP 5.3.0 y lo siguiente más o menos dice que no es buena idea confiar en ella.

esto es debido a que ergi es muy lenta y si mal no lo recuerdo tiene muchos bugs

ahora te pregunto, lo que quieres es eliminar la URL y poner "enlace"? lo digo para cambiar el patrón
__________________
Mucha seguridad nunca es suficiente.... Por una red segura
El señor ilustre obscurece nuestras mentes
Usas Linux? http://www.dudalibre.com/gnulinuxcounter
  #13 (permalink)  
Antiguo 14/11/2010, 17:11
Avatar de xcorpion  
Fecha de Ingreso: octubre-2003
Ubicación: m é x i c o
Mensajes: 676
Antigüedad: 20 años, 6 meses
Puntos: 4
Respuesta: Expresión regular para quitar urls

Si las imagenes no son urls puedes remplazarlo asi:

$cadena = eregi_replace('([A-Za-z0-1\-_]+)\.(jpg|gif|png|jpeg)', 'imagen' ,$cadena);

(suponiendo que el nombre de la imagen solo contiene caracteres alfanumericos y guiones)
  #14 (permalink)  
Antiguo 14/11/2010, 17:20
 
Fecha de Ingreso: noviembre-2010
Mensajes: 36
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: Expresión regular para quitar urls

joer! Es que estoy todo contento, xcorpion. Ahora queda muchísimo más elegante:

marcos: Esta es la casa de todos -- A ver, probando a ver si quita enlaces: (enlace)...
en Re: Taberna... || Sun, 14 Nov 2010 23:05:32 || ver +
-·-

marcos: Subido el de París, que la verdad es que me parece fascinante. (enlace)...
en Re: El patrón de Marsella (TDM) || Sun, 14 Nov 2010 19:21:17 || ver +
  #15 (permalink)  
Antiguo 14/11/2010, 17:21
 
Fecha de Ingreso: noviembre-2010
Mensajes: 36
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: Expresión regular para quitar urls

ops! no había visto los últimos post.

Voy a probarlos, compais!
  #16 (permalink)  
Antiguo 14/11/2010, 17:23
 
Fecha de Ingreso: noviembre-2010
Mensajes: 36
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: Expresión regular para quitar urls

jaao_death, lo que necesito es que se reemplace cualquier palabra que empiece por http, es decir una URL, es decir, que la borre.

¿Es muy problemático usar el eregi? Es que el patrón de xcorpion funciona perfectamente.

Voy a probar las imágenes...
  #17 (permalink)  
Antiguo 14/11/2010, 17:24
Avatar de xcorpion  
Fecha de Ingreso: octubre-2003
Ubicación: m é x i c o
Mensajes: 676
Antigüedad: 20 años, 6 meses
Puntos: 4
Respuesta: Expresión regular para quitar urls

jaao_death tiene razon "eregi_raplace" es una funcion obsoleta, pasa que tenia años usandola y no me actualizaba con la documentacion. ¿Que nos aconsejas usar? preg_replace() ?
  #18 (permalink)  
Antiguo 14/11/2010, 17:27
 
Fecha de Ingreso: noviembre-2010
Mensajes: 36
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: Expresión regular para quitar urls

SÍ!!!!!!!!!!!!!!!!!!!!!!!!!!!! jaja ajjajajja ajjaja... FORMIDABLE, JAAO, FORMIDABLE!!!

marcos: Probando a ver si quita las imágenes. imagen...

No tengo palabras para los dos. De verdad, os estoy más que agradecido!!!!!
  #19 (permalink)  
Antiguo 14/11/2010, 17:40
Avatar de jaao_death  
Fecha de Ingreso: abril-2009
Ubicación: Murcia/españa
Mensajes: 229
Antigüedad: 15 años
Puntos: 6
Respuesta: Expresión regular para quitar urls

Cita:
Iniciado por xcorpion Ver Mensaje
Yo lo haria asi:
$cadena = eregi_replace('href=([^ >]+)', 'href="#"' ,$cadena);

yo así:

Código PHP:
$pattern "href=[\'\"][^\"\']*[\"\']";
$replacement "href=\"#\"";
$cadena preg_replace ($pattern$replacement$text); 
para inhabilitarlo. y para borrarlo por completo, mejor dicho cambiarlo por "enlace":

Código PHP:
$pattern "\<a [^\\>]*>[\\<]*</a>";
$replacement "enlace";
// etc 
Cita:
Iniciado por xcorpion Ver Mensaje
jaao_death tiene razon "eregi_raplace" es una funcion obsoleta, pasa que tenia años usandola y no me actualizaba con la documentacion. ¿Que nos aconsejas usar? preg_replace() ?
yo no, el equipo de PHP
__________________
Mucha seguridad nunca es suficiente.... Por una red segura
El señor ilustre obscurece nuestras mentes
Usas Linux? http://www.dudalibre.com/gnulinuxcounter
  #20 (permalink)  
Antiguo 14/11/2010, 17:49
 
Fecha de Ingreso: noviembre-2010
Mensajes: 36
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: Expresión regular para quitar urls

Muchas gracias por la atención y el seguimiento.

Jaao, al poner ese código (el primero), me sale esto:

preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash in

Está copiado tal cual:

Código:
$pattern = "href=[\'\"][^\"\']*[\"\']";
$replacement = "href=\"#\"";
$limpio = preg_replace ($pattern, $replacement,$limpio);
El segundo no lo he probado ya que antes le he pasado un strip_tags para cargarme cualquier miasmilla que se haya quedado al pulirme los bbcodes.
  #21 (permalink)  
Antiguo 14/11/2010, 17:49
Avatar de xcorpion  
Fecha de Ingreso: octubre-2003
Ubicación: m é x i c o
Mensajes: 676
Antigüedad: 20 años, 6 meses
Puntos: 4
Respuesta: Expresión regular para quitar urls

@jaao_death: ok gracias por la info, las expresiones regulares funcionan igual que con eregi_replace? y es case sensitive?
Saludos
  #22 (permalink)  
Antiguo 14/11/2010, 17:57
Avatar de jaao_death  
Fecha de Ingreso: abril-2009
Ubicación: Murcia/españa
Mensajes: 229
Antigüedad: 15 años
Puntos: 6
Respuesta: Expresión regular para quitar urls

por lo que sé son compatibles (cuando empecé con RegExp me encaminé con ereg) la única diferencia es que para poder compilar el patrón este debe estar entre:

Código PHP:
$pattern "/pattern/options"
leete esto:

http://www.php.net/manual/es/referen...ern.syntax.php

cuando yo lo saqué estaba todo en una página solo, pero luego lo imprimí y me desaparecí, jeje, si encuentro el archivo te lo mando.
__________________
Mucha seguridad nunca es suficiente.... Por una red segura
El señor ilustre obscurece nuestras mentes
Usas Linux? http://www.dudalibre.com/gnulinuxcounter
  #23 (permalink)  
Antiguo 14/11/2010, 18:01
Avatar de jaao_death  
Fecha de Ingreso: abril-2009
Ubicación: Murcia/españa
Mensajes: 229
Antigüedad: 15 años
Puntos: 6
Respuesta: Expresión regular para quitar urls

Cita:
Iniciado por mmfilesi Ver Mensaje
Muchas gracias por la atención y el seguimiento.

Jaao, al poner ese código (el primero), me sale esto:

preg_replace() [function.preg-replace]: Delimiter must not be alphanumeric or backslash in

Está copiado tal cual:

Código:
$pattern = "href=[\'\"][^\"\']*[\"\']";
$replacement = "href=\"#\"";
$limpio = preg_replace ($pattern, $replacement,$limpio);
El segundo no lo he probado ya que antes le he pasado un strip_tags para cargarme cualquier miasmilla que se haya quedado al pulirme los bbcodes.
Código:
$pattern = "/href=[\'\"]{1}[^\"\']*[\"\']{1}/";
$replacement = "href=\"\\#\"";
$limpio = preg_replace ($pattern, $replacement,$limpio);
y ahora?

sorry mañana te respondo, es hora de dormir y mañana tengo que ir al insti, si quieres mándame un MP y ya te ayudo con lo que pueda.
__________________
Mucha seguridad nunca es suficiente.... Por una red segura
El señor ilustre obscurece nuestras mentes
Usas Linux? http://www.dudalibre.com/gnulinuxcounter
  #24 (permalink)  
Antiguo 14/11/2010, 18:04
Avatar de jaao_death  
Fecha de Ingreso: abril-2009
Ubicación: Murcia/españa
Mensajes: 229
Antigüedad: 15 años
Puntos: 6
Respuesta: Expresión regular para quitar urls

Código PHP:
$pattern "/\\<a [^\\>]*\\>[\\<]*\\<\\/a\\>"; <<-- se me olvid&#243; iniciar y terminar el patrón "/" y
           //escapar los caracteres (recuerda, doble escape, no escapas en el string sino en el argumento)
$replacement "enlace";
// etc 
__________________
Mucha seguridad nunca es suficiente.... Por una red segura
El señor ilustre obscurece nuestras mentes
Usas Linux? http://www.dudalibre.com/gnulinuxcounter
  #25 (permalink)  
Antiguo 14/11/2010, 18:20
 
Fecha de Ingreso: noviembre-2010
Mensajes: 36
Antigüedad: 13 años, 5 meses
Puntos: 1
Respuesta: Expresión regular para quitar urls

Perfecto amigos. He hecho un max mix con lo que habéis dicho los dos y queda así:

Código:
$pattern = "/\\S+\\.(jpg|gif|png|jpeg)/";
$replacement = "(imagen)";
$limpio = preg_replace ($pattern, $replacement,$limpio);

$pattern ="/https?:([^ >\"\']+)/";
$replacement = "(enlace)";
$limpio = preg_replace ($pattern, $replacement,$limpio);
Lo cual hace que los post que saco del foro para poner en mi log queden así de chulos ^^:

marcos: Probando a ver si quita las imágenes. (imagen)...

marcos: Esta es la casa de todos -- A ver, probando a ver si quita enlaces: (enlace)...


Compais, no tengo palabras, de verdad. Estoy que echo botes de la alegría.

MUCHÍSIMAS GRACIAS A LOS DOS!!!!!!!!!!!!!!!!!!!!!!!!

Etiquetas: quitar, regular, url
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 09:05.