Ошибка в регулярном выражении?
stackoverflow.com/questions/1732348/regex-match-op...
Используйте любой доступный xml-парсер, например, simple_html_dom. С ним ваша конструкция будет простая и читаемая: foreach($html->find('img') as $img) {
      echo "Адрес страницы: " . $img->src . "\n";
      echo "Название: " . $img->title . "\n";
      echo "Описание: " . $img->alt . "\n";
}
Вариант с регулярным выражением корректнее было бы записать в виде получения пар ключ-значение и дальнейшей обработкой полученных данных: https://regex101.com/r/aS7qG0/1. Вам никто не гарантирует как наличие, так и порядок аттрибутов в тэге.
последний / не заэкранировали.
надо \/ <img.*?(?:(?:\s+(src)="([^"]+)")|(?:\s+(title)="([^"]+)")|(?:\s+(alt)="([^"]+)")|(?:\s+[^\s]+))+.*\/>