【问题标题】:PHP Regex & YouTubePHP 正则表达式和 YouTube
【发布时间】:2009-11-01 23:23:15
【问题描述】:

我正在编写临时 PHP 脚本来更新我的 vBulletin 论坛的 MySQL 数据库。

这就是它的作用。它会找到任何具有 [youtube][/youtube] 代码的条目。然后它必须用指向 youtube 视频的链接替换该代码。

所以,这里是我必须采取的一个例子:

$string = <<<END
Hi everyone! Check out this video that I just found on YouTube!

[youtube]<object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/Md1E_Rg4MGQ&hl=en&fs=1&"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="http://www.youtube.com/v/Md1E_Rg4MGQ&hl=en&fs=1&" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed></object>[/youtube]
END;

我必须让它看起来像这样:

[URL=http://www.youtube.com/watch/?v=Md1E_Rg4MGQ]http://www.youtube.com/watch/?v=Md1E_Rg4MGQ[/URL]

使用正则表达式让我头疼。我没有足够的正则表达式经验来弄清楚该怎么做。

它必须看起来像这样:

$string = preg_replace("#\[youtube\]?????\[/youtube\]#i", "[URL=http://www.youtube.com/watch?v=$1]http://www.youtube.com/watch?v=$1[/URL]", $string);

请帮忙! ^_^

【问题讨论】:

    标签: regex youtube


    【解决方案1】:

    大概是这样的吧?

    $string = preg_replace('#\[youtube\].*?name="movie" value="(.*?)".*?\[/youtube\]#i', "[URL=$1]$1[/URL]", $string);
    

    请注意,这是有限的,因为它需要精确的字符串 name="movie" value="????????????????" 格式 - 从技术上讲,还有其他具有相同含义但顺序不同的有效 HTML 结构等。理想的解决方案是使用某种 DOM 解析器获取电影属性的值,但如果您知道人们将始终使用该确切格式(即,如果从 youtube 复制/粘贴总是这样),那么正则表达式就足够了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-23
      • 1970-01-01
      • 1970-01-01
      • 2017-12-01
      相关资源
      最近更新 更多