更改文本中的图像链接 [PHP]

Changing image links in text [PHP]

我想用以下内容替换文本中的图片链接,但没有。我确定一切都是正确的,但我不知道问题出在哪里。你能帮我解决这个问题吗?

{#img='image_name.jpg', alt=''}

PHP代码:

$text = "Hello <img src='https://example.com/image1.jpg'> , <img src='example.com/image2.jpg'> and now you :)";
    $re = '/<img.*?src=[\'"]([^"\'])[\'"]>/'; 
    preg_match_all($re, $text, $matches, PREG_SET_ORDER, 0);
    foreach ($matches as $val) {
        $str = preg_replace('/<img.*?src=[\'"](' . $val[1] . ')[\'"]>/', "{#img='" . $val[1] . "', alt=''}", $text);
    }
    var_dump($text);

结果:

Hello <img src='https://example.com/image1.jpg'> , <img src='https://example.com/image2.jpg'> and now you :)

没有匹配的原因是因为在模式 <img.*?src=[\'"]([^"\'])[\'"]> 中你必须重复字符 class ([^"\']*) 因为现在你正好匹配 1 次。

然后在 foreach 循环中,被替换的字符串在变量 $str 中,因为 $text根本没动,只传给preg_match_all.

但不需要先匹配,再单独循环调用preg_replace

您可以仅使用 preg_replace 作为示例,并使用包含 url 的捕获组 2 值进行替换。

$text = "Hello <img src='https://example.com/image1.jpg'> , <img src='example.com/image2.jpg'> and now you :)";
$str = preg_replace('/<img[^>]*src=([\'"])(.*?)>/', "{#img='', alt=''}", $text);

echo $str;

输出

Hello {#img='https://example.com/image1.jpg', alt=''} , {#img='example.com/image2.jpg', alt=''} and now you :)

在 3v4l.org 上查看 regex demo for the matches on regex101 and a PHP demo