如何在php中返回正则表达式匹配,而不是替换

2022-03-22 00:00:00 php preg-replace

我尝试提取挡路HTML文本中图像的第一个src属性,如下所示:

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

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

翻阅PHP手册,preg_filter()似乎可以做到这一点,但我不能指望最终用户使用PHP>5.3。

所有其他PHP regex函数似乎都是preg_Match()的变体,返回布尔值,或preg_place,用某种东西替换匹配。是否有直接的方法在PHP中返回正则表达式匹配?


解决方案

可以使用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字符串中提取数据时,正则表达式通常不是"合适的工具".)

相关文章