PHP中的搜索和正则表达式

PHP中的搜索和正则表达式,php,regex,Php,Regex,因为我是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", d

因为我是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;
}
$ch=curl_init();
curl_setopt($ch,CURLOPT_URL,'http://carouselinfo.com/contents.js');
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
$contents=curl\u exec($ch);
$contents=json_encode($contents,true);
卷曲关闭($ch);
echo$内容;
$reg|u exUrl=“/(http | https | ftp | ftps)\:\/\/[a-zA-Z0-9\-\.]+\.[a-zA-Z]{2,3}(\/\S*)?/”;
if(preg_match_all($reg_exUrl,$contents,$url))
{
回声“
”; echo$url; }
首先删除json\u 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]); 
}

示例

首先删除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]); 
}

示例

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

问题在于json\u编码添加了额外字符(“转义字符”)或转换了其他字符(转换为ascii编码的等效字符),这意味着您的regexp无法匹配。您应该在$contents的原始值上运行regexp。顺便说一下,不要重复整个$url值,因为这是一个数组。

您有一些错误,但是将javascript变量保存为php变量并执行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);

}
}

您有一些错误,但是将javascript变量保存为php变量并执行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);

}
}


删除
json\u encode
调用。这里不需要它,并在特殊字符周围添加了额外的转义,包括将
/
转换为
\/
,这会阻止正则表达式匹配。@DCoder+1我甚至会说json\u encode是一个错误:)@DCoder当我没有使用json\u encode时,然后回显$url print array这是正确的,
preg\u match\u all
生成一个匹配数组,而
echo
无法处理这些匹配。尝试使用
print\u r
var\u dump
代替。Json\u encode winll不工作,因为它传递的参数不是数组或对象,而是字符串。json_decode是这里应该使用的函数。但是字符串是JavaScript而不是JSON。因此它将不起作用。请删除
json\u encode
调用。这里不需要它,并在特殊字符周围添加了额外的转义,包括将
/
转换为
\/
,这会阻止正则表达式匹配。@DCoder+1我甚至会说json\u encode是一个错误:)@DCoder当我没有使用json\u encode时,然后回显$url print array这是正确的,
preg\u match\u all
生成一个匹配数组,而
echo
无法处理这些匹配。尝试使用
print\u r
var\u dump
代替。Json\u encode winll不工作,因为它传递的参数不是数组或对象,而是字符串。json_decode是这里应该使用的函数。但是字符串是JavaScript而不是JSON。所以它不起作用。@shiplu.mokadd.im-show数组代替echo$url这就是为什么我使用json_encodeso,然后我想做一些任务,比如在每一行中打印一个持续时间:那么我应该如何打印它这是一个非常基本的PHP。你应该使用loop.mean,首先我找到duration,然后用duration打印每个html,对吗?更新了我的答案。现在它也捕获了持续时间。但是你已经构建了统一的数组,因为regex不能以这种方式捕获。@shiplu.mokadd.im-show数组代替echo$url,这就是为什么我要使用json_encode,所以在这之后我想做一些任务,比如在每一行中打印一个持续时间:那么我应该如何打印它这是一个非常基本的PHP。你应该使用loop.mean,首先我找到duration,然后用duration打印每个html,对吗?更新了我的答案。现在它也捕获了持续时间。但是你已经建立了统一的数组,因为正则表达式并不是这样捕获的。那么我应该用什么来打印每个URL呢?我应该用什么来打印每个URL呢?我编辑了一些代码,放进了真实的网站,并放了一个var转储,这样你就可以看到所有内容,在一个单独的文件上运行这个脚本,这样你就可以看到输出了。。。这是你要找的吗?你得把你的正则表达式修好我想,我没碰那个。。。。不是我的强项。不,我在寻找我的代码工作意味着我有js文件首先我使用curl函数yo extract,然后我想回显js文件的url,它是[url:,duration:35],我的意思是我想提取url和duration我编辑了一点代码,放入真实的网站,并放入一个var dump,这样你就可以看到所有内容,在单独的文件上运行此脚本,以便可以看到输出。。。这是你要找的吗?你得把你的正则表达式修好我想,我没碰那个。。。。不是我的强项。不,我正在寻找我的代码工作意味着我有js文件首先我使用curl函数yo extract,然后我想回显那个js文件的url,它是[url:,duration:35],我的意思是我想提取url和duration