2009-04-22 16 views
5

OK, sé que debería usar un analizador DOM, pero esto es para rescindir algún código que es una prueba de concepto para una función posterior, por lo que quiero obtener rápidamente alguna funcionalidad en un conjunto limitado de código de prueba.Reemplazar atributos HTML usando una expresión regular en PHP

estoy tratando de despojar a la anchura y la altura de los atributos HTML trozos, en otras palabras, en lugar de

width="number" height="number" 

con una cadena en blanco.

La función Estoy intentando escribir es similar al siguiente en la actualidad

function remove_img_dimensions($string,$iphone) { 
    $pattern = "width=\"[0-9]*\""; 
    $string = preg_replace($pattern, "", $string); 

    $pattern = "height=\"[0-9]*\""; 
    $string = preg_replace($pattern, "", $string); 

    return $string; 
} 

Pero eso no quiere trabajar.

¿Cómo puedo hacer que funcione?

Respuesta

7

PHP es único entre los principales idiomas, aunque las expresiones regulares se especifican en forma de cadenas literales como Python, Java y C#, también debe utilizar delimitadores de expresiones regulares como Perl, JavaScript y Ruby.

Tenga en cuenta también que puede usar comillas simples en lugar de comillas dobles para reducir la necesidad de caracteres de escape como comillas dobles y barras diagonales inversas. Es un buen hábito para entrar, porque las reglas de escape para cadenas de comillas dobles pueden ser sorprendentes.

Por último, se puede combinar sus dos sustituciones en uno por medio de una simple alternancia:

$pattern = '/(width|height)="[0-9]*"/i'; 
+0

perfecto - muchas gracias! –

4

Su patrón necesita el carácter de patrón de inicio/fin. De esta manera:

$pattern = "/height=\"[0-9]*\"/"; 
$string = preg_replace($pattern, "", $string); 

"/" es el carácter habitual, pero la mayoría de los personajes quiere trabajar ("| patrón |", "patrón # #", lo que sea).

0

Creo que faltan los paréntesis (que pueden ser //, || o varios otros pares de caracteres) que deben rodear una expresión regular en la cadena. Trate de cambiar su patrón $ asignaciones a esta forma:

$pattern = "/width=\"[0-9]*\"/"; 

... si quieres ser capaz de hacer una comparación entre mayúsculas y minúsculas, añadir una 'i' al final de la cadena, por lo tanto:

$pattern = "/width=\"[0-9]*\"/i"; 

Espero que ayude! David

Cuestiones relacionadas