2 回答

TA貢獻1877條經驗 獲得超1個贊
你不應該為此使用正則表達式。您可以strpos像以前一樣使用您的,但將其移動到 DOM 解析中并比較每個img. 然后您可以使用removeChild()刪除相應的圖像。(這是來自如何使用 DOMDocument 刪除元素的改編答案?)
<?php
$inbox_message = '<p> Keep This</p><img src="http://example.com/someimage1.jpeg"><img src="http://example.com/someimage2.jpeg"><img src="http://example.com/someimage3.jpeg"><img src="http://example.com/someimage4.jpeg"><h1>Fake element</h1><img style="OVERFLOW: hidden; WIDTH: 0px; MAX-HEIGHT: 0px" alt="" src="http://test.mydomain.com/project433q325/track/Images/signature.gif?id=446&etc=1586624376">';
$doc = new DOMDocument();
$doc->loadHTML($inbox_message);
$imgs = $doc->getElementsByTagName('img');
for($i = $imgs->length; --$i >= 0;){
$node = $imgs->item($i);
if (strpos($node->getAttribute('src'), 'http://test.mydomain.com/project433q325/track/Images/signature.gif?') !== false) {
$node->parentNode->removeChild($node);
}
}
echo $doc->savehtml();
https://3v4l.org/qinLR
您也可以使用strtolowerif $node->getAttribute('src')might contain varying case。在這種情況下,針strpos也應該小寫。
對于正則表達式問題...
preg_replace("\<img src\=\"(.+)\"(.+)\/\>/i", '', $src);
正則表達式的開頭試圖使用不是有效定界符的反斜杠。A delimiter can be any non-alphanumeric, non-backslash, non-whitespace character.起始定界符必須與結束定界符匹配。此外,您$src只包含屬性的值,因此<img src...永遠不會匹配。
如果您要實現該功能,則.+需要將其替換為您要檢查的 URI。
但是正則表達式在這里確實是錯誤的方法。像以前一樣,為這些類型的工作使用解析器。正則表達式不應用于結構化數據。如果它是結構化的,則可能已經為它編寫了函數。

TA貢獻1936條經驗 獲得超7個贊
要刪除所有img
標簽,請使用以下正則表達式模式:
<img\s+[^>]+>
https://regex101.com/r/HfStzZ/1
要包含您在問題中描述的特定src
網址,請使用以下正則表達式模式:
<img\s+[^>]*\bsrc="[^"]*\/signature\.gif[^\>]*\>
https://regex101.com/r/HfStzZ/2
在 PHP 中,使用preg_replace
如下命令:
$output = preg_replace('/<img\s+[^>]*\bsrc="[^"]*\/signature\.gif[^\>]*\>/', '', $input);
- 2 回答
- 0 關注
- 134 瀏覽
添加回答
舉報