php 正则实例 模版解析

下面是一个php 模版解析的例子。
通过正则表达式将 {youku id_XMTc5ODgwOTA4} 转对对应的播放代码。

<?php
header( 'Content-type:text/html; charset=utf-8' );
$template  = '
{youku id_XMTc5ODgwOTA4}
{youku id_XMzA5NTUwOTky}
{youku id_XMzEwMTQyMjA4}
{youku id_XMjYzNTE0MTA4}
{youku id_XMzEwNDMwODk2}
{youku id_XMjk4NjA3Njk2}
{youku id_XMjQ3ODQwNDYw}
{youku id_XMjk4MjA2NDI0}
{youku id_XMzEwNDIyMTY4}
{youku id_XMzA5ODUzMjI4}
{youku id_XMzEwMzMxNjc2}
{youku id_XMzEwMTk4Njky}
{youku id_XMTA3OTA4MzQw}
{youku id_XMjQ1NzI1ODcy}
{youku id_XMjI4Mzc0OTY0}
';
 
$cfgYouku  array array ( "rege" => "/\s*\{youku\s*id_(.*)}\s*/i" , "callback" => "compile" ));
 
  foreach  ( $cfgYouku  as  $val ){
         if (isset( $val [ "callback" ]))  
         {
                 $template  = preg_replace_callback( $val [ "rege" ],  $val [ "callback" ],  $template );
         }
  }
         
 
 
/**
 
  * forjobs
  * @param unknown_type $matched
  */
function  compile( $matched )
{
          $url  $matched [0];
          preg_match( "/id\_(\w+)/" $url $matches );
          
          if  ( empty ( $matches )){
             preg_match( "#v_playlist\/#" $url $mat );
             if (! $mat return  false;
 
             $html  = self::_fget( $url );
             preg_match( "#videoId2\s*=\s*\'(\w+)\'#" $html $matches );
             if (! $matches return  false;
         }
          
         $link  "http://v.youku.com/player/getPlayList/VideoIDS/{$matches[1]}/timezone/+08/version/5/source/out?password=&ran=2513&n=3" ;
         $retval  = fileGetContent(  $link  );
         if  ( $retval ) {
             $json  = json_decode( $retval , true);
             $data [ 'img' ] =  $json [ 'data' ][0][ 'logo' ];
             $data [ 'title' ] =  $json [ 'data' ][0][ 'title' ];
             $data [ 'url' ] =  $url ;
             $data [ 'swf' ] =  "http://player.youku.com/player.php/sid/{$matches[1]}/v.swf" ;
             
             if $data  $data [ 'object' ] =  "<h2>" . $data [ 'title' ]. "</h2>" . "<embed src=\"{$data['swf']}\" quality=\"high\" width=\"480\" height=\"400\" align=\"middle\" allowNetworking=\"all\" allowScriptAccess=\"always\" type=\"application/x-shockwave-flash\"></embed>" ;
             return  $data [ 'object' ];
         else  {
             return  false;
         }
}
 
/**
 
  * @author murain
  * @param String $url
  */
function  fileGetContent( $url )
{
        $ch  = curl_init();
        $timeout  = 10;
        curl_setopt( $ch , CURLOPT_URL,  $url );
        curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1);
        curl_setopt( $ch , CURLOPT_CONNECTTIMEOUT,  $timeout );
        curl_setopt( $ch , CURLOPT_FOLLOWLOCATION, 1);
        $contents  = trim(curl_exec( $ch ));
        curl_close( $ch );
        return  $contents ;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值