如何从文本中删除所有img标记,除了包含某个单词的那些标记

Bro*_*uff 0 php regex preg-replace

我想从某个文本中删除所有img标记,除了包含某个关键字的那些(例如它们所托管的域).

这是我想出来的,但我担心它不起作用:

 $text = preg_replace("/<img[^>]+(?!keyword)[^>]+\>/i", "", $text); 
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激!:)

And*_*ite 5

使用DOMDocument :: loadHTML?它使用libxml引擎盖,快速而强大.

不要试图用正则表达式解析HTML.

我做了那么大胆,因为我在这里看到了很多,解决方案总是脆弱,最糟糕的是错误.一旦使用真正的HTML解析器获取所需的属性,那么使用正则表达式更合理.

[更新] - 即使这是来自Wordpress你应该没事,因为它需要一个字符串作为参数.

该函数解析字符串源中包含的HTML.与加载XML不同,HTML不必加载良好.

像下面这样的东西应该让你去...

$doc = new DOMDocument();
$doc->loadHTML($var);
$images = $doc->getElementsByTagName('img');
Run Code Online (Sandbox Code Playgroud)

  • 我不同意,"我想从某个文本中剥离所有img标签",这既是解析也是操纵.正则表达式适用于常规语言,HTML不常规,不受上下文限制.构建一个你认为适用于这种情况的正则表达式,并且可能存在一个会破坏它的情况. (2认同)