2

因为我是 PHP 新手。这是我的 js 代码

      var sites = [
 //Texte anime
  {url:" http://carouselinfo.com/canal/", duration:9},
 //Texte anime
  {url:" http://carouselinfo.com/canal-2/", duration:9}, 
  //Intro detallee
 {url:"http://carouselinfo.com/index-t1.html", duration:35},
 //CTA
 {url:"http://carouselinfo.com/index-t2.html", duration:35},
     //Football
  {url:"http://carouselinfo.com/twitter-ligue/", duration:100},  
 //Texte anime
  {url:" http://carouselinfo.com/canal-2/", duration:9},     
  //TrailersClub.com
  {url:"http://trailersclub.com/?lang=fr", duration:480},    
 //Heure
 {url:"http://carouselinfo.com/heure", duration:8},
 //Meteo
 {url:"http://carouselinfo.com/meteo", duration:12},
 //Texte anime
  {url:" http://carouselinfo.com/canal-cine/", duration:9},
 //Cine
 {url:"http://carouselinfo.com/cine/index-t1.html", duration:150},
  //Texte anime
  {url:" http://carouselinfo.com/canal-2/", duration:9}, 
 //Heure
 {url:"http://carouselinfo.com/heure", duration:8},
 //Meteo
 {url:"http://carouselinfo.com/meteo", duration:12},
 //Texte anime
  {url:" http://carouselinfo.com/canal-cine/", duration:9},
   //Cine

 ];

我想执行一些搜索任务,例如 url 和持续时间,以便在单独的列中显示,但是当我为 http 执行 Regx 时,html 上没有任何内容。

这是我粗略的 PHP 代码:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,'http://carouselinfo.com/contents.js');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 $contents = curl_exec ($ch);
 $contents = json_encode($contents,true);
 curl_close($ch);
 echo $contents;

 $reg_exUrl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";
 if (preg_match_all($reg_exUrl,$contents,$url))
{
    echo '<br/>';
    echo $url;
}
4

3 回答 3

0

首先删除 json_encode 调用。然后应用以下正则表达式,

 /url\s*:\s*"([^"]+)"/

代码应该看起来像。

$reg_exUrl = '/url\s*:\s*"([^"]+)"\s*,\s*duration\s*:\s*(\d+)/';
if (preg_match_all($reg_exUrl,$contents,$matches))
{
    print_r($matches[1]); // not using echo here
    print_r($matches[2]); 
}

示例PHP 片段

于 2012-05-12T06:47:35.693 回答
0

问题是 json_encode 正在添加额外的字符(“\”转义字符)或转换其他字符(到它们的 ascii 编码等效项),这意味着您的正则表达式无法匹配。您应该在 $contents 的原始值上运行正则表达式。顺便说一句,不要回显整个 $url 值,因为这是一个数组。

于 2012-05-12T06:48:43.137 回答
0

您有一些错误,但是如何将您的 javascript var 保存为 php var 并执行 foreach 循环?

像这样...

$sites = array('http://www.php.net/','http://stackoverflow.com/','http://www.godaddy.com/');
$duration = array('5','100','5000');

foreach($sites as $site){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$site);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $contents = curl_exec ($ch);
    curl_close($ch);

$reg_exUrl = "/(http|https|ftp|ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/";
preg_match_all($reg_exUrl,$contents,$urls);
if(isset($urls)){

    var_dump($urls);

}
}
于 2012-05-12T06:52:09.220 回答