preg_match_all找到链接,删除相同的结果?

时间:2015-11-08 15:50:04

标签: php regex preg-match-all

我遇到匹配结果的问题,这是我的脚本,无法找到如何从抓取的内容添加链接并避免相同的结果?我只需要开始http://www.autogidas.lt/ ....

的结果
 <?
 $id= $_GET['id'];
 $user= $_GET['user'];
 $login=$_COOKIE['login'];

 $query = mysql_query("SELECT pavadinimas,nuoroda,kuras,data,data_new from autogidas where vartotojas='$user' and id='$id'");
 $rezultatas=mysql_fetch_row($query);

 $url = "$rezultatas[1]";

 $info = file_get_contents($url); 

 function scrape_between($data, $start, $end){
 $data = stristr($data, $start); 
 $data = substr($data, strlen($start));
 $stop = stripos($data, $end);
 $data = substr($data, 0, $stop);
 return str_replace('  ', ' ', $data);
 }
 $contents = scrape_between($info, "<table border=\"0\" cellspacing=\"0\">", "</table>");

   preg_match_all('/<span class="ttitle2".*?>(.*?)<\/span>/',$contents,$pavadinimas); 

   preg_match_all('/<span class="ttitle3".*?>(.*?)<\/span>/',$contents,$miestas); 

   preg_match_all('/<span class="ttitle1".*?>(.*?)<\/span>/',$contents,$metai_kaina); 

   foreach($metai_kaina[0] as $key=>$metai_kaina_val){ 
   if($key%2==0)
   $metai[] = strip_tags($metai_kaina_val);
   else  
   $kaina[] = strip_tags($metai_kaina_val);  
   }

   preg_match_all('/<img .*?(?=src)src=\"([^\"]+)\"/si', $contents, $img_link);
   preg_match_all('/<a href="http:\/\/www.autogidas.lt(.*?)"/s', $contents, $matches);

   for($i=0; $i<count($pavadinimas[0]); $i++){
    echo '<tr>
      <td><a href='HERE I NEED LINKS'><img src="'.$img_link[1][$i].'"></a></td>
      <td>'.$pavadinimas[0][$i].'</td>
      <td>'.$miestas[0][$i].'</td>
      <td>'.$metai[$i].'</td>
      <td><center>'.$kaina[$i].'</center></td>
    </tr>';
    }

   echo "</table>";
   ?>

我尝试了一些帮助,但不知道如何更新脚本,最后我需要的东西,并且无法找到如何做到这一点...我不是profi我只是为了好玩而学习自己的php,感谢您的帮助! !抱歉我的英语不好......

1 个答案:

答案 0 :(得分:-1)

您可以使用此代码:

// RegEx to only match with http://www.address.com/* kind of URLs in anchors
$regexp = "<a\s[^>]*href=(\"??)(http\:\/\/www\.adress\.com\/[^\" >]*?)\\1[^>]*>(.*)<\/a>";
if (preg_match_all("/$regexp/siU", $svetaines_turinys, $matches, PREG_SET_ORDER)) {
    // collect results in array
    $arr = [];
    foreach($matches as $match) {
        $arr[] = $match[2];
    }
    // remove duplicates from it
    $arr = array_unique($arr);
    // send to client
    foreach($arr as $match) {
        echo "$match <BR/>";
    }
}

在对原始问题进行更改后进行编辑:

您希望获得唯一的超链接,因为在您正在抓取的页面上使用了两次相同的超链接。但这两者并不完全相同,只有两个中的一个跟着img标记,因此您可以更改正则表达式以获取$matches,如下所示:

preg_match_all('/<a href="(http:\/\/www.autogidas.lt[^"]*)"\s*>\s*<img/s',
    $contents, $matches);

请注意,在上面的正则表达式中,我还移动了左括号以匹配整个url,这是您在下面的代码中所需要的。

然后在循环中,您可以在引用的字符串中输出带有此片段的超链接:

    <a href="'.$matches[1][$i].'">

注意:您应该使用<?php而不仅仅是<?

来启动代码