在自定义标记之间查找字符串并对其进行处理


Finding string between custom tags and doing something with it

在我的新项目中,成员可以使用我的YouTube API,它将生成如下所示的标签,以便他们在任何他们想要的文本区域使用它:

<ymedia>http://www.youtube-nocookie.com/v/qQG0XfU-bFs</ymedia>

我希望我的PHP配置文件页面采取<ymedia></ymedia>之间的字符串,并使用$ymstring为从ymedia标签收集的字符串生成下面的类似代码:

<?php
$u_agent = $_SERVER[''HTTP_USER_AGENT''];
if(preg_match(''/Opera/i'',$u_agent)){
<object width="320" height="240" data="".$ymstring."?fs=1&amp;hl=en_US&amp;rel=0"><param name="movie" value="".$ymstring."?fs=1&amp;hl=en_US&amp;rel=0" /><param name="allowFullScreen" value="true" /><param name="wmode" value="transparent" /><param name="bgColor" value="#ffffff" /><param name="flashvars" value="vu=".$ymstring."?fs=1&amp;hl=en_US&amp;rel=0" /></object>
} else {
<object width="320" height="240"><param name="movie" value="".$ymstring."?fs=1&amp;hl=en_US&amp;rel=0"></param><param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param><embed src="".$ymstring."?fs=1&amp;hl=en_US&amp;rel=0" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="320" height="240"></embed></object>
}
?>

基本上,我试图在$字符串中找到所有的ymedia标签,并将它们替换为上面针对Opera或其他浏览器的youtube编码。

应该可以:

preg_match("/<ymedia>(.*?)<'/ymedia>/", $Input, $Matches);

然后,您的结果将是$Matches[1],您可以将其作为$ymstring传递。

为了简单起见,您希望使用preg_replace_callback:

$html = preg_replace_callback('#<ymedia>(http://.*?)</ymedia>#',
         "ymedia_cb", $html);
function ymedia_cb($matches) {
    $url = $matches[1];
    return "<object src=$url>";
}

显然,您将使用if/else结构返回适当且完整的对象标记。