Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] preg_match_all + foreach - pobieranie URL
Forum PHP.pl > Forum > Przedszkole
moovspot
Witam serdecznie, zmagam się ze skryptem, który ma za zadanie wyciągać URL-e z danego contentu i zapisywać je jeden pod drugim


W zmiennej $zapa[post_content] mam zapisaną stronkę w HTML

A oto mój ,,skrypt'' smile.gif

  1. preg_match_all('/<a.*href=\"([^\"]*)\".*><\/a>/', $zapa[post_content], $matches);
  2.  
  3.  
  4. foreach($matches as $poka){
  5.  
  6. echo $poka."<br>";
  7.  
  8.  
  9. }


Proszę mi powiedzieć co mogę zrobić aby ten skrypt nie pobierał mi znacznika <IMG> i aby wylistował mi wszystkie linki z anchorem
kreatiff
Musisz przestać być zachłanny biggrin.gif i dodatkowo wskazać te anchory we wzorze.
  1. preg_match_all('#<a.*?href="(.*?)".*?>(.*?)</a>#', $zapa[post_content], $matches);
moovspot
Dzięki wielkie ale nadal zaciąga mi obrazki czy to znaczy, że mam wyciąć teraz img ?
Próbuje już milionowy raz i nic tongue.gif
kreatiff
Wklej kilka linijek kodu, bym zobaczył jak te obrazki włącza do $matches, bo nie za bardzo rozumiem.
Chyba, że to właśnie obrazki są w anchorze i ich chcesz się pozbyć?
kujol
  1. preg_match_all('#<a.*href="(.*)".*>.*<\/a>#', $zrodlo, $matches);
  2.  
  3. print_r($matches[1]);


Przechwyć tylko to co href wink.gif
b4rt3kk
Taki pattern spróbuj:

  1. #href="[^"]+"#
moovspot
W anchorze jest <img>


Próbuję bawić się na przykładzie strony wilno.edu.pl (żeby nie było to nie żadna reklama) tongue.gif

$zapa[post_content] ma w sobie całą treść (html) i chce żeby skrypt wyciągnął mi link tj ,,wycieczki do wilna'' tongue.gif sam <a href="costamcos"><a> ale jesli jest <img> to opuszcza to ;p

utknąłem przy tym:

  1. preg_match_all('/<a href="(.*)">/',$zapa[post_content],$a);
  2.  
  3. $count = count($a[1]);
  4. for ($row = 0; $row < $count ; $row++) {
  5.  
  6. preg_replace('|<img.*>|isU', '', $a);
  7. echo $a[1]["$row"]."<br />";
  8.  
  9. }
  10.  



Z góry dzięki
b4rt3kk
Cytat(moovspot @ 25.03.2015, 09:50:50 ) *
W anchorze jest <img>


Próbuję bawić się na przykładzie strony wilno.edu.pl (żeby nie było to nie żadna reklama) tongue.gif

$zapa[post_content] ma w sobie całą treść (html) i chce żeby skrypt wyciągnął mi link tj ,,wycieczki do wilna'' tongue.gif sam <a href="costamcos"><a> ale jesli jest <img> to opuszcza to ;p

utknąłem przy tym:

  1. preg_match_all('/<a href="(.*)">/',$zapa[post_content],$a);
  2.  
  3. $count = count($a[1]);
  4. for ($row = 0; $row < $count ; $row++) {
  5.  
  6. preg_replace('|<img.*>|isU', '', $a);
  7. echo $a[1]["$row"]."<br />";
  8.  
  9. }
  10.  



Z góry dzięki


Próbowałeś pattern, który Ci napisałem post wyżej?
moovspot
Tak, już próbowałem

  1. preg_match_all('#href="[^"]+"#',$zapa[post_content],$a);
  2.  
  3.  
  4.  
  5. count = count($a[0]);
  6. echo "<b>Znaleziono URL:</b> " .$count."<p>";
  7. for ($row = 0; $row < $count ; $row++) {
  8. echo $a[0]["$row"]."<br />";
  9. }
  10.  
  11.  


Wyświetla mi:


href="http://wilno.edu.pl/wp-content/uploads/2014/11/Vilnius_city.jpg"
href="http://wycieczka-wilno.pl"


i teraz chciałbym wyciąć wszystkie JPG aby zostasł sam http://wycieczka-wilno.pl
b4rt3kk
Cytat(moovspot @ 25.03.2015, 12:33:04 ) *
Tak, już próbowałem

  1. preg_match_all('#href="[^"]+"#',$zapa[post_content],$a);
  2.  
  3.  
  4.  
  5. count = count($a[0]);
  6. echo "<b>Znaleziono URL:</b> " .$count."<p>";
  7. for ($row = 0; $row < $count ; $row++) {
  8. echo $a[0]["$row"]."<br />";
  9. }
  10.  
  11.  


Wyświetla mi:


href="http://wilno.edu.pl/wp-content/uploads/2014/11/Vilnius_city.jpg"
href="http://wycieczka-wilno.pl"


i teraz chciałbym wyciąć wszystkie JPG aby zostasł sam http://wycieczka-wilno.pl


Przeleć po wynikowej tablicy i usuń wszystkie rekordy z .jpg, .png, itd. Już nie koniecznie za pomocą preg_match, strpos będzie szybsze.

  1. foreach ($matches as $key => $match) {
  2. if (strpos('.jpg', strtolower($match)) !== false) {
  3. unset($matches[$key]);
  4. }
  5. }


Ale równie dobrze może to być preg_match:

  1. foreach ($matches as $key => $match) {
  2. if (preg_match('#[\.jpg|\.png]+$#', strtolower($match)) !== false) {
  3. unset($matches[$key]);
  4. }
  5. }
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.