Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Preg_match
Forum PHP.pl > Forum > Przedszkole
vegeta
  1. preg_match_all("/<a(?:[^>]*)href=\"(http:\/\/[^\"]*)\"(?:[^>]*)>(?:[^<]*)<\/a>/is", $stripped_file, $matches);


Co mam zrobić, aby wypluwało mi tylko linki do stron głównych? Chodzi mi o to, aby nie wypluwało wyników, które mają kilka / po głównym adresie. Chcę, żeby wyświetlało mi tylko wyniki z jednym / i bez niego np. http://onet.pl i http://onet.pl/, ale nie dawało już http://onet.pl/dzieci_neo albo http://onet.pl/dzieci_neo/blaaa/
amii
Można to zrobić w ten sposób na ciągach znaków:

  1. $ciag = array();
  2. foreach ($matches as $value) {
  3. $pozycja = strpos($value[1], '/', 7); //zwraca pierwsze wyrażenie w nawiasach, 7 bo pomijamy http://
  4. $ciag[] = substr($value[1], 0, $pozycja);
  5. }
vegeta
Wolałbym jednak zrobić to na samych preg_matchach jak się da.

Oto mój cały kod:

  1. <?php
  2. $original_file = file_get_contents("http://it-maniak.pl/");
  3. $stripped_file = strip_tags($original_file, "<a>");
  4. preg_match_all("/<a(?:[^>]*)href=\"(http:\/\/[^\"]*)\"(?:[^>]*)>(?:[^<]*)<\/a>/is", $stripped_file, $matches);
  5.  
  6. header("Content-type: text/plain");
  7. print_r($matches);
  8. ?>
Piogola
  1. <?php
  2. $original_file = file_get_contents("http://it-maniak.pl/");
  3. $stripped_file = strip_tags($original_file, "<a>");
  4. preg_match_all('#href="(http://[^/]+/)"#is', $stripped_file, $matches);
  5.  
  6. header("Content-type: text/plain");
  7. print_r($matches);
  8. ?>


Kod
Array
(
    [0] => Array
        (

        )    
[1] => Array
        (
            [0] => http://forum.it-maniak.pl/
            [1] => http://debnix.compu.boo.pl/
            [2] => http://forum.it-maniak.pl/
            [3] => http://grajek.it-maniak.pl/
            [4] => http://tcn.cba.pl/
            [5] => http://potterwarta.info/
            [6] => http://evilus.wordpress.com/
            [7] => http://kurshtml.boo.pl/
            [8] => http://mikonews.tk/
            [9] => http://wordpress.org/
            [10] => http://wordpress.org/
        )


)
vegeta
Ok, dzięki, ale teraz nie dodaje linków, które nie mają / na końcu np. http://zww.me, który jest w stopce.

I jeszcze jedno. Chcę, aby moja tablica nie zawierała dwóch identycznych wyników tak jak w przypadku skanowania onet.pl link http://poczta.onet.pl/
(5 i 6)

//Poradziłem sobie
Piogola
Kod
#href="(http://[^/"]+[/]?)"#is
vegeta
Kolejny problem. Chcę wyświetlić tablice:

  1. <?php
  2. $original_file = file_get_contents("http://it-maniak.pl/");
  3. $stripped_file = strip_tags($original_file, "<a>");
  4. preg_match_all('#href="(http://[^/"]+[/]?)"#is', $stripped_file, $matches);
  5.  
  6. $unikat = array_unique($matches[1]);
  7.  
  8. foreach ($unikat as $link)
  9. {
  10. for ($i = 0; $i < count($link); $i++)
  11. {
  12. echo $link[$i] . '<br />';
  13. }
  14. }
  15. ?>


Wyświetlają mi się tylko h, a jak zmienie w 6 linijce na $matches to pojawiają mi się tylko te 'linki' z czystego preg_match
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.