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

发布于 2024-12-09 20:39:56 字数 660 浏览 0 评论 0原文

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

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

<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);
}

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

I have some text with images within it. I want to replace specific images within the text with something else.

i.e. the text contains an a youtube img url that I want to replace with the actual video link.

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

and replace it with the youtube Iframe code:

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

my function looks like this:

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

What do I need to change in the regex to do the above?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

半山落雨半山空 2024-12-16 20:39:56

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

你写道:

我有一些文本,其中包含图像。

如果您所指的文本实际上是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()

Your regex is looking for <img src=, but there is a class attribute between img and src. Using $find= '/<img.*src=[^>]+>/i'; corrects the problem; however, this illustrates why you shouldn’t use regex to parse HTML.

You wrote:

I have some text with images within it.

If the text you’re referring to is actually HTML, then there are better alternatives to using regex for this.

Update

I believe this is what you’re looking for.

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

There’s no need for a separate youtube() function.

If you want to replace more than one image, use preg_replace_all() instead of preg_replace().

花想c 2024-12-16 20:39:56

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

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

如果有多个图像,前一个答案将会失败。

The following regex would get all the images with a specific url. I not sure if this is what you wanted.

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

Previous anwser would fail if there were more than one image.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文