как вернуть соответствие регулярному выражению в php, вместо замены - PullRequest
11 голосов
/ 11 ноября 2009

Я пытаюсь извлечь первый атрибут 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 Ответ

25 голосов
/ 11 ноября 2009

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

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

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


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

$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 ...)

...