PHP使用正则表达式从html字符串中获取图像url



我正试图用php从一个html字符串中获取所有图像url。来自img标签和内联css(背景图像(

<?php
$html = '
<div style="background-image : url(https://exampel.com/media/logo.svg);"></div>
<img src="https://exampel.com/media/my-photo.jpg" />
<div style="background-image:url('https://exampel.com/media/icon.png');"></div>
';

preg_match('/<img.+src=['"](?P<src>.+?)['"].*>|background-image[ ]?:[ ]?url([ ]?[']?["]?(.*?.(?:png|jpg|jpeg|gif|svg))/i', $html, $image);
echo('<pre>'.print_r($image, true).'</pre>');
?>

其输出为:

Array
(
[0] => background-image : url(https://exampel.com/media/logo.svg
[src] => 
[1] => 
[2] => https://exampel.com/media/logo.svg
)

首选输出为:

Array
(
[0] => https://exampel.com/media/logo.svg
[1] => https://exampel.com/media/my-photo.jpg
[2] => https://exampel.com/media/icon.png
)

我这里遗漏了一些东西,但我不知道是什么

使用preg_match_all((并重新排列结果:

<?php
$html = <<<EOT
<div style="background-image : url(https://exampel.com/media/logo.svg);"></div>
<img src="https://exampel.com/media/my-photo.jpg" />
<div style="background-image:url('https://exampel.com/media/icon.png');"></div>
EOT;
preg_match_all(
'/<img.+src=['"](.+?)['"].*>|background-image ?: ?url(['" ]?(.*?.(?:png|jpg|jpeg|gif|svg))/i',
$html,
$matches,
PREG_SET_ORDER
);
$image = [];
foreach ($matches as $set) {
unset($set[0]);
foreach ($set as $url) {
if ($url) {
$image[] = $url;
}
}
}
echo '<pre>' . print_r($image, true) . '</pre>' . PHP_EOL;

最新更新