使用preg_replace查找具有特定src的图像

时间:2011-10-14 13:45:00

标签: php regex preg-replace

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

即。该文本包含一个我想用实际视频链接替换的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);
}

我需要在正则表达式中更改以执行上述操作?

2 个答案:

答案 0 :(得分:0)

您的正则表达式正在寻找<img src=,但classimg之间存在src属性。使用$find= '/<img.*src=[^>]+>/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()

答案 1 :(得分:0)

以下正则表达式将获得具有特定网址的所有图片。我不确定这是不是你想要的。

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

如果有多张图片,以前的版本会失败。