preg_match_all如何删除img标签?

时间:2011-06-21 13:35:23

标签: php preg-match-all

$str=<<<EOT
<img src="./img/upload_20571053.jpg" /><span>some word</span><div>some comtent</div>
EOT;

如何使用img或其他方式删除preg_match_all代码?感谢。

我想要echo <span>some word</span><div>some comtent</div> //可能是其他html标记,就像在$str中一样,只需删除img。

7 个答案:

答案 0 :(得分:2)

正如许多人所说,你不应该用正则表达式来做这件事。您看到的替换图像标签的大多数示例都是天真的,并不适用于所有情况。正则表达式考虑到所有事情(假设你首先有格式良好的XHTML),将会很长,非常复杂,以后很难理解或编辑。即使你认为它的工作正常,但它有可能没有。您应该使用专门用于解析(X)HTML的解析器。

如果没有使用PHP的DOM扩展的正则表达式,如何正确地执行此操作:

// add a root node to the XHTML and load it
$doc = new DOMDocument;
$doc->loadXML('<root>'.$str.'</root>');
// create a xpath query to find and delete all img elements
$xpath = new DOMXPath($doc);
foreach ($xpath->query('//img') as $node) {
        $node->parentNode->removeChild($node);
}
// save the result
$str = $doc->saveXML($doc->documentElement);
// remove the root node
$str = substr($str, strlen('<root>'), -strlen('</root>'));

答案 1 :(得分:1)

preg_replace("#\<img src\=\"(.+)\"(.+)\/\>#iU", NULL, $str);
echo $str;

答案 2 :(得分:1)

$str = preg_replace('#<img[^>]*>#i', '', $str);

答案 3 :(得分:1)

除了@ Karo96,我还会更广泛:

/<img[^>]*>/i

$re = '/<img[^>]*>/i';
$str = preg_replace($re,'',$str);

<强> demo

这也假设html格式正确。此外,这忽略了我们应该用正则表达式解析html的一般规则,但是为了回答你我包括它。

答案 4 :(得分:0)

也许你想要preg_replace。它应该是:$str = preg_replace('#<img.+?>#is', '', $str),但应该注意的是,对于任何非平凡的HTML处理,您必须使用XML解析器,例如使用DOMDocument

答案 5 :(得分:0)

$noimg = preg_replace('/<img[^>]*>/','',$str);

应该做的伎俩。

答案 6 :(得分:-1)

不要使用正则表达式。期。这不是完全解析,它可能是微不足道的,但rexeg不是为DOM做的:

RegEx match open tags except XHTML self-contained tags

仅使用DomDocument。