Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: RE - wyszukiwanie adresów linków
Forum PHP.pl > Forum > PHP
Tibod
Pisze skrypt w którym wyszukuję adresy zapisane z odnośnikach na danej stronie.

  1. <?php
  2. $wyrazenie='#href[W]*=[W]*([-a-z0-9_?&.=]*)[b|>]*#';
  3. ?>


Ogólnie działa dobrze. Jedyny problem to to, że równie dobrze wychwytuje linki typu: gg, javascript, skype itd. Wszystkie one mają jednak wspólną cechę, mianowicie dwukropek

Mógłby mi ktoś pomóc wstawić w to wyrażenie fragment mówiący, że w adresie nie może wystąpić dwukropek. Pewnie to będzie coś w stylu ([^:]*), ale jak go dołożyć do warunków to nie mam pojęcia.
domis86
Ale czasami ":" wystepuje w parametrach (get).
i co wtedy? smile.gif
Tibod
Ale w ramach linków jednego sklepu to raczej nie. To raczej przy przenoszeniu na inną witrynę, a to już i tak mnie nie interesuję. Potrzebuję zbadać wyłącznie jedną domenę (na raz).
Kicok
masz trzy możliwości do zapisania linków w hrefach:
Kod
1. <a href="link.html">sadsad</a> <a href="link.html" class="asd">sadsad</a>
2. <a href='link.html'>sadsad</a> <a href='link.html' class='sad'>sadsad</a>
3. <a href=link.html>asdsafd</a> <a href=link.html class=csa>asdsafd</a>


Analizując to można dojść do wniosku, że jeśli link zaczął się cudzysłowem lub apostrofem, to zakończy się odpowiednio cudzysłowem lub apostrofem. Jeśli nie został użyty żaden z tych znaków, to link zakończy się przy pierwszym białym znaku lub pierwszym ">". Składając to do kupy otrzymujemy takie oto działające, ale kompletnie niezrozumiałe dla niedoświadczonych wyrażenie:

  1. <?php
  2.  
  3.  
  4. $link = 'as<a href="link_1.html">link1</a>sad dsa <a href="link_2.html" class="cos">link2</a>asdsd
  5.  asdsaf<a href='link_3.html'>link3</a>sad dsa <a href='link_4.html' class="cos">link4</a>asdsd
  6.  ds d<a href=link_5.html>link5</a>dsf gds dg <a href=link_6.html class="cos">link6</a>ds dsg ';
  7.  
  8. if( preg_match_all( '/<a[^>]+?hrefs*?=s*?("|')?(.*?)(?(1)1[^>]*>|(?:s[^>]*>|>))(.*?)</a>/si', $link, $sub ) ) {
  9. echo '<pre>' . htmlspecialchars( print_r( $sub, true ) ) . '</pre>';
  10. }
  11.  
  12. ?>


Ew. możesz sprawdzać, czy w już znalezionych danych jest dwukropek (strpos" title="Zobacz w manualu PHP" target="_manual) - jeśli tak, to olewasz te dane i przechodzisz do następnych.



PS. To oczywiście nie jest gotowiec, tylko ogólny wzór pobierania linków z kodu HTML. Musisz go sobie jeszcze przerobić. Jednak zamiana (.*?) na "wszystko tylko nie dwukropek" będzie o wiele prostsza niż zamiana ([-a-z0-9_\?\\&\.=]*) na "wszystko tylko nie dwukropek" ;]
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.