$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。
答案 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。