Удалить атрибут стиля из определенных тегов HTML в документе и заменить атрибутом класса

Например, у меня есть строка:

$string = '<div class="ImageRight" style="width:150px">';

который я хочу преобразовать в это:

$string = '<div class="ImageRight">';
  1. Я хочу удалить часть style="width:150px с preg_replace(), где размер 150 может варьироваться, поэтому ширина может быть 500 пикселей и т. д.

  2. Кроме того, последняя часть имени класса также различается, поэтому класс может быть ImageRight, ImageLeft, ImageTop и т. д.

Итак, как я могу полностью удалить атрибут стиля из строки с вышеупомянутой структурой, где единственное, что меняется, — это последняя часть имени класса и значение ширины?

РЕДАКТИРОВАТЬ: ФАКТИЧЕСКАЯ строка, которая у меня есть, представляет собой весь html-документ, и я не хочу удалять атрибут стиля из всего html, только из тегов, которые соответствуют строке, показанной выше.


person Weblurk    schedule 16.06.2011    source источник
comment
Отличный источник для изучения регулярных выражений: regular-expressions.info.   -  person Felix Kling    schedule 16.06.2011
comment
будут ли теги класса/стиля всегда отображаться одинаково?   -  person James C    schedule 16.06.2011
comment
это часть html-документа или будет только этот div?   -  person Gordon    schedule 16.06.2011


Ответы (5)


Я думаю, это то, что вам нужно...

$modifiedHtml = preg_replace('/<(div class="Image[^"]+") style="[^"]+">/i', '<$1>', $html);
person James C    schedule 16.06.2011

Полностью удалить.

$string = preg_replace("/style=\"width:150px\"/", "", $string);

Заменять:

$string = preg_replace("/style=\"width:150px\"/", "style=\"width:500px\"", $string);
person Sujit Agarwal    schedule 16.06.2011

Вы можете сделать это в два шага с помощью

$place = 'Left';
$size = 500;
$string = preg_replace('/(?<=class="image)\W(?=")/',$place,$string);
$string = preg_replace('/(?<=style="width:)[0-9]+(?=")/',$size,$string);

Примечание. (?=...) называется просмотром вперед.

person SteeveDroz    schedule 16.06.2011

Как насчет:

$string = preg_replace('/(div class="Image.+?") style="width:.+?"/', "$1", $string);
person Toto    schedule 16.06.2011

Простой:

$string  = preg_replace('/<div class="Image(.*?)".*?>/i', '<div class="Image$1">', $string);
person Pedro Lobito    schedule 17.06.2011