Как вернуть регулярное выражение в php вместо замены

Я пытаюсь извлечь первый атрибут src изображения в блоке текста HTML следующим образом:

Lorem ipsum <img src="http://example.com/img.jpg" />consequat.

У меня нет проблем с созданием регулярного выражения для соответствия атрибуту src, но как вернуть первый сопоставленный атрибут src вместо , заменив его?

Из заливки из руководства PHP кажется, что preg_filter() будет делать трюк, но я не могу полагаться на конечных пользователей с PHP > 5.3.

Все остальные функции регулярных выражений PHP, по-видимому, являются вариантами preg_match(), возвращают логическое значение или preg_replace, что заменяет совпадение чем-то. Есть ли простой способ вернуть соответствие регулярного выражения в PHP?

Ответ 1

Вы можете использовать третий параметр preg_match, чтобы узнать, что соответствовало (это массив, переданный по ссылке):

int preg_match  ( string $pattern  , 
    string $subject  [, array &$matches  [, 
    int $flags  [, int $offset  ]]] )

Если указаны совпадения, то это заполненный результатами поиска. $matches[0] будет содержать текст, который соответствует полной схеме, $matches[1]будет иметь текст, соответствующий впервые зафиксировано в скобках подшаблон и т.д.


Например, с этой частью кода:

$str = 'Lorem ipsum dolor sit amet, adipisicing <img src="http://example.com/img.jpg" />consequat.';

$matches = array();
if (preg_match('#<img src="(.*?)" />#', $str, $matches)) {
    var_dump($matches);
}

Вы получите этот вывод:

array
  0 => string '<img src="http://example.com/img.jpg" />' (length=37)
  1 => string 'http://example.com/img.jpg' (length=23)

(Обратите внимание, что мое регулярное выражение слишком упрощенно - и это регулярное выражение, как правило, не является "правильным инструментом", когда дело доходит до извлечения данных из некоторой строки HTML...)