Используя несколько разных шаблонов, но каждый из них придумал эту ошибку – так что случилось?
Самый короткий для диагностики:
$pattern = "<img([^>]*[^/])>"; preg_match_all($pattern, $subject, $matches);
благодаря
Вам не хватает разделителей регулярных выражений. Пытаться:
$pattern = "#<img([^>]*[^/])>#i";
Единственной косой чертой является разделитель по умолчанию, поэтому символ после него в исходном регулярном выражении находился в сообщении об ошибке. Использование традиционных слэшей в качестве разделителей и экранирование косой черты, которая не является разделителем, будет выглядеть так:
$pattern = "/<img([^>]*[^\\/])>/";