我正在尝试在HTML文本块中提取图像的第一个src属性,如下所示:
Lorem ipsum <img src="http://example.com/img.jpg" />consequat.
创建正则表达式以匹配src属性没有问题,但我如何返回第一个匹配的src属性,而不是替换呢?
从倾注PHP手册开始,似乎preg_filter()可以解决问题,但我不能依赖拥有PHP的最终用户&gt; 5.3。
所有其他PHP正则表达式函数似乎都是preg_match()的变体,返回一个布尔值,或preg_replace,它用某些东西替换匹配。在PHP中返回正则表达式匹配是否有直接的方式?
答案 0 :(得分:25)
您可以使用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字符串中提取数据时,正则表达式通常不是“正确的工具”...)