【问题标题】:PHP get image url from html-string using regular expressionPHP使用正则表达式从html-string获取图像url
【发布时间】:2022-01-20 21:50:34
【问题描述】:

我正在尝试使用 php 从 html 字符串中获取所有图像 url。 来自 img-tags 和 inline css (background-image)

<?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
)

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

【问题讨论】:

标签: php regex


【解决方案1】:

使用 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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 2023-03-27
    • 2010-12-21
    • 2012-10-21
    相关资源
    最近更新 更多