【问题标题】:find image with specific src using preg_replace使用 preg_replace 查找具有特定 src 的图像
【发布时间】:2011-10-14 13:45:00
【问题描述】:

我有一些带有图像的文本。我想用其他东西替换文本中的特定图像。

即文本包含一个 youtube img url,我想用实际的视频链接替换它。

<img class="mceItem" src="http://img.youtube.com/vi/1MsVzAkmds0/default.jpg" alt="1MsVzAkmds0">

并将其替换为 youtube Iframe 代码:

<iframe title="'.$id.'" class="youtube-player" type="text/html" width="576" height="400" src="http://www.youtube.com/embed/'.$id.'" frameborder="0"></iframe>

我的函数如下所示:

function replacelink($link) {
  $find= ("/<img src=[^>]+\>/i");
  $replace = youtube("\\2");
  return preg_replace($find,$replace);
}

我需要在正则表达式中进行哪些更改才能执行上述操作?

【问题讨论】:

  • 什么是“youtube”功能?
  • ...如果我能获得图片的 alt 标签或 src,我可以将其发送到 youtube 函数 youtube($id){ return iframe code ?$id=1MsVzAkmds0 } 并显示 iframe而不是图片。

标签: php regex preg-replace


【解决方案1】:

您的正则表达式正在寻找&lt;img src=,但在imgsrc 之间有一个class 属性。使用$find= '/&lt;img.*src=[^&gt;]+&gt;/i'; 可以解决问题;但是,这说明了为什么不应该使用正则表达式来解析 HTML。

你写的:

我有一些带有图像的文本。

如果您所指的 text 实际上是 HTML,那么使用正则表达式有更好的替代方法。

更新

我相信这就是你要找的东西。

<?php
function replacelink($text) {
    $replace = '<iframe title="$2" class="youtube-player" type="text/html" width="576" height="400" <iframe title="$2" class="youtube-player" type="text/html" width="576" height="400" src="http://www.youtube.com/embed/$2" frameborder="0"></iframe>';
    $find = '/(<img.*?alt="([\da-z]+)".*?>)/i';
    return preg_replace($find, $replace, $text);
}

$imagestr = '<img class="mceItem" src="http://img.youtube.com/vi/1MsVzAkmds0/default.jpg" alt="1MsVzAkmds0">';
echo replacelink($imagestr);
?>

不需要单独的youtube() 函数。

如果要替换多个图像,请使用preg_replace_all() 而不是preg_replace()

【讨论】:

  • @Innate:我刚刚看到您对youtube() 函数的评论并相应地更新了我的答案。
【解决方案2】:

以下正则表达式将获取具有特定 url 的所有图像。我不确定这是否是你想要的。

<img [^>]*?src="url"[^>]*?>

如果有多个图像,以前的 anwser 将失败。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-18
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    相关资源
    最近更新 更多