Foros del Web » Programando para Internet » PHP »

expresión regular en PHP

Estas en el tema de expresión regular en PHP en el foro de PHP en Foros del Web. Hola, Estoy con una expresión regular que no me termina de ir, he buscado pero no he encontrado nada, asi que os comento. Tengo una ...
  #1 (permalink)  
Antiguo 04/06/2008, 13:38
 
Fecha de Ingreso: agosto-2004
Mensajes: 513
Antigüedad: 20 años, 2 meses
Puntos: 5
expresión regular en PHP

Hola,

Estoy con una expresión regular que no me termina de ir, he buscado pero no he encontrado nada, asi que os comento.

Tengo una página HTML con varios enlaces, y quiero eliminar los enlaces, es decir, todo el contenido de una etiqueta <a> ... </a>

Por ejemplo, este enlace (con el que tengo los problemas):

<a href="http://ad.pruebas.net/clk;28744783;12882281;s?http://actualidad.pruebas.es/hombre_actual" class="menubio"><span class="sn">Hombre actual</span></a>

y utilizo la siguiente expresión regular:

$file = eregi_replace("<a[^>]*>([^(</a>)]*)</a>", " ", $texto);

Pues no termina de ir, he probado de varias formas pero tampoco. El problema está en que dentro de la etiqueta <a> ... </a> hay código HTML.

¿alguna solución?
  #2 (permalink)  
Antiguo 04/06/2008, 13:49
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: expresión regular en PHP

haber haber... que es lo que quieres?

- eliminar solo las etiquetas HTML usa strip_tags()
- quieres eliminar todo y conservar <a href="foo">el texto dentro del enlace</a> usa strip_tags()
- deseas solo conservar la dirección URL dentro del href="foo" y a su ves, eliminar lo demás... dejando solo la URL ???

sino, no puedo entender la expresión.... suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 04/06/2008, 16:51
AlvaroG
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: expresión regular en PHP

Te pido al igual que pateketrueke que especifiques cuál es tu intención.

Por otro lado, la expresión regular no funcionará por un motivo simple: la estás usando mal

Código PHP:
$file eregi_replace("<a[^>]*>([^(</a>)]*)</a>"" "$texto); 
Dentro de [] no puede haber patrones, solo caracteres. Esto [^(</a>)]* debería fallar.

Si querés eliminar los enlaces y su contenido, esta expresión es más simple y funciona siempre:

Código PHP:
$file eregi_replace("<a .*?</a>"" "$texto); 
Saludos.
  #4 (permalink)  
Antiguo 05/06/2008, 00:27
 
Fecha de Ingreso: agosto-2004
Mensajes: 513
Antigüedad: 20 años, 2 meses
Puntos: 5
Respuesta: expresión regular en PHP

Lo que necesito es eliminar solo los enlaces de un código HTML, es una página que hay varios enlaces y mucho contenido, el problema es que está mal formada, es decir, dentro de las etiquetas <a> ... </a> hay también código HTML, y ese es el problema.

He probado strip_tags() pero no funciona para lo que busco, ya que strip_tags() elimina las etiquetas pero no el contenido, es decir, no elimina lo que hay entre las etiquetas <a> ... </a>

Luego $file = eregi_replace("<a .*?</a>", " ", $texto); tampoco funciona para lo que necesito, ya que si hay varios enlaces elimina practicamente todo, es decir, elimina también contenido que no hay que filtrar.

El ejemplo que utilizo es:

<a href="http://ad.pruebas.net/clk;28744783;12882281;s?http://actualidad.pruebas.es/hombre_actual" class="menubio"><span class="sn">Hombre actual</span></a>Hola<a>pruebas</a>

¿Qué tendría que dejar la expresión regular? Solo tendria que aparecer el testo "Hola", y ese es el problema. ¿más o menos me he explicado?
  #5 (permalink)  
Antiguo 05/06/2008, 02:54
 
Fecha de Ingreso: agosto-2004
Mensajes: 513
Antigüedad: 20 años, 2 meses
Puntos: 5
Respuesta: expresión regular en PHP

Bueno, al final con expresiones regulares no ha sido posible.

Lo he resuelto a lo bruto, con un while y strpos.
Por si alguien lo necesita:

$first = strpos(strtolower($file), "<a");
$count = 0;
while (!($first === FALSE) && $count < 100) {
$count ++;
$next = strpos(strtolower($file), "</a");
$file = str_replace(substr($file, $first, $next - $first +4), " ", $file);
$first = strpos(strtolower($file), "<a");
}
  #6 (permalink)  
Antiguo 05/06/2008, 05:45
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: expresión regular en PHP

puedes poner un ejemplo de como funciona tu función???

digo pa' como ver... como lo hiciste sin regex
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
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 12:17.