我有一些带有图片的文字。我想用其他东西替换文本中的特定图像。
即。该文本包含一个我想用实际视频链接替换的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);
}
我需要在正则表达式中更改以执行上述操作?
答案 0 :(得分:0)
您的正则表达式正在寻找<img src=
,但class
和img
之间存在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"[^>]*?>
如果有多张图片,以前的版本会失败。