Cómo hacer un patrón para reemplazar la etiqueta de imagen

Necesito reemplazar la etiqueta img. La etiqueta original es, por ejemplo:

<img src="index.php?act=img&amp;sub=article&id=35558" width="150" height="172">

entonces quiero reemplazarlo por:

<img src="index.php?act=img&amp;sub=article&amp;id=35558" style="width: 150px; height: 172"/> 

La identificación en src se puede cambiar.
No sé cómo definir el patrón adecuado, probé varios pero ninguno funcionó.

preguntado el 04 de julio de 12 a las 08:07

4 Respuestas

Por favor, las expresiones regulares no son la herramienta adecuada para este tipo de cosas. Las expresiones regulares deben usarse cuando analiza cosas simples, HTML no es un lenguaje regular de todos modos.

Por favor lee este artículo sobre analizar HTML con PHP

contestado el 23 de mayo de 17 a las 13:05

Esto debería funcionar:

$img1 = '<img src="index.php?act=img&amp;sub=article&id=35558" width="150" height="172">';
$img2 = preg_replace('/\<img([^>]+)(width|height)="(\d+)"([^>]*)(width|height)="(\d+)"([^>]*)\>/i', '<img$1 style="$2:$3px;$5:$6px"$4$7>', $img1);

El orden de los parámetros (o cualquier adicional) no importa aquí.

Respondido 04 Jul 12, 09:07

¿Qué sucede si la etiqueta de la imagen también tiene algún otro atributo? ¿O ya tiene una etiqueta de estilo? - benjamin grünbaum

Benjamin, tu respuesta es definitivamente correcta. Pero no todas las tareas requieren tal enfoque. No sabemos cuál es el objetivo de Karol, pero su pregunta es clara: tiene varias líneas del mismo patrón y necesita reemplazarlas. Las expresiones regulares son perfectas aquí. - Eugene

Gracias. Funciona muy bien. Mi objetivo era simple, necesitaba reemplazar las etiquetas en un solo formato, así que pensé que la expresión regular encajaba mejor. - Karol85

Supongo que está buscando un patrón de expresión regular para poder usar preg_match para reconstruir la etiqueta. En ese caso, algo como esto debería:

preg_match('/src="(.+?)".+?width="(.+?)".+?height="(.+?)"/i', $cadena, $coincidencias);

Sin embargo, en el momento en que estos atributos comiencen a cambiar de orden, esta expresión regular ya no funcionará. Si es posible, sería mejor analizar el HTML a través de PHP.

Respondido 04 Jul 12, 08:07

Esto funciona de la manera deseada: P Pero no se recomienda usar expresiones regulares para cumplir su propósito.

<?php
$string = '<img src="index.php?act=img&amp;sub=article&id=35558" width="150" height="172">';
echo $resultString = preg_replace(array('/\&id\b/i','/width="150" height="172"/i'), array('&amp;id','style="width: 150px; height: 172"'), $string); 

Respondido 04 Jul 12, 08:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.