$content = '<img src = ""><img alt = "test" width = "400px"><a href = "https://placeholder.com"><img src = "https://via.placeholder.com/350x150"></a>';
$content = preg_replace('!(<a\s[^>]+>)?<img([^>]+)src = ""([^>]*)>(</a>)?!i' , '' , $content );
echo $content;
Но можно удалить только src = "", нельзя удалить без src
<img alt = "test" width = "400px"><a href = "https://placeholder.com"><img src = "https://via.placeholder.com/350x150"></a>






Используйте регулярное выражение <img(?![^>]*(src = "[^"]+"))[^>]*>.
(?![^>]*(src = "[^"]+") отрицательного просмотра вперед не будет захватывать тег img с src = "..."