【问题标题】:PHP Regex: remove div with class "image"PHP 正则表达式:使用类“图像”删除 div
【发布时间】:2011-11-11 00:59:31
【问题描述】:

我需要使用以下模式删除变量中的所有图像。 (使用 PHP)。

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

所有的 div 标签都会有一个 image 类,但浮动右侧可能会有所不同。我似乎无法让正则表达式工作,请帮助我。

【问题讨论】:

标签: php regex replace match


【解决方案1】:

使用 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();
?>

【讨论】:

  • 嘿,我试过了,但它似乎无法在服务器上运行。但基本上,我所需要的只是找到一个具有“图像”类和可能的其他类的 div,但它们并不重要。比我只想从字符串中删除整个 div 。如何使用正则表达式做到这一点?
  • 我不知道正则表达式,尽管我尝试了很多次来学习它,所以我试图避免它。
【解决方案2】:

这个正则表达式匹配你的模式:

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

我已经针对多个字符串对其进行了测试。它适用于:

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

,您可以在其中将“blah”和“anything”字符串替换为任何内容。 此外,正则表达式中的各种 \W* 允许从字符串到字符串的不同间距。

你说过你想用 PHP 来做这件事。

这将从 $my_html 变量中存储的页面中删除所有匹配的模式。

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

我想这就是你要找的东西?

【讨论】:

  • 是的,这就是我的解决方案。非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-02-16
  • 2010-10-20
  • 2023-04-02
  • 1970-01-01
  • 1970-01-01
  • 2011-12-23
相关资源
最近更新 更多