14

我正在尝试在这样的 HTML 文本块中提取图像的第一个 src 属性:

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

我创建正则表达式以匹配 src 属性没有问题,但是如何返回第一个匹配的 src 属性,而不是替换它?

通过翻阅 PHP 手册,似乎preg_filter()可以解决问题,但我不能依赖 PHP > 5.3 的最终用户。

所有其他 PHP 正则表达式函数似乎都是 preg_match() 的变体,返回一个布尔值,或者 preg_replace,它将匹配替换为某些东西。有没有一种简单的方法可以在 PHP 中返回正则表达式匹配?

4

1 回答 1

32

您可以使用 , 的第三个参数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 字符串中提取数据时,正则表达式通常不是“正确的工具”......)

于 2009-11-11T15:23:18.457 回答