PHP Regex: удалить div с классом "изображение" - PullRequest
1 голос
/ 11 ноября 2011

Мне нужно удалить все изображения в переменной, используя следующий шаблон.(С PHP).

<div class="float-right image"> 
  <img class="right" src="http://www.domain.com/media/images/image001.png" alt="">
</div>

Все теги div будут иметь класс image , но float-right может отличаться.Я не могу заставить работать регулярное выражение, пожалуйста, помогите мне.

Ответы [ 2 ]

3 голосов
/ 11 ноября 2011

Используйте DOM вместо регулярных выражений. Пример:

<?php
$doc = new DOMDocument();
$doc->loadHTML('<div class="float-right image"> 
  <img class="right" src="http://www.domain.com/media/images/image001.png" alt="">
</div>');

foreach( $doc->getElementsByTagName("div") as $old_img ) {
    $img = $doc->createElement("img");
    $src = $doc->createAttribute('src');
    $class = $doc->createAttribute('class');
    $src->value = 'http://your.new.link';
    $class->value = 'right';
    $img->appendChild($src);
    $img->appendChild($class);
    $doc->replaceChild($img, $old_img);
}

echo $doc->saveHTML();
?>
1 голос
/ 03 декабря 2011

Это регулярное выражение соответствует вашему шаблону:

(?s)<div class="[^"]*">\W*<img\W*class="[^"]*"\W*src="[^"]*"\W*alt="[^"]*">\W*</div>

Я протестировал его на нескольких строках Это будет работать на:

<div class="anything"> 
<img class="blah" src="anything" alt="blah">
</div>

, где вы можете заменить строки "бла" и "что угодно" на что угодно. Кроме того, различные \ W * в регулярном выражении допускают различный интервал от строки к строке.

Вы сказали, что хотите сделать это на PHP.

Это удалит все сопоставленные шаблоны со страницы, хранящейся в переменной $ my_html.

$my_html=preg_replace('%(?s)<div class="[^"]*">\W*<img\W*class="[^"]*"\W*src="[^"]*"\W*alt="[^"]*">\W*</div>%m', '', $my_html);

Я думаю, это то, что вы искали?

...