Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyrażenia regularne
Forum PHP.pl > Forum > PHP
scaper
Zacząłem zabawę z wyrażeniami regularnymi, i jakoś nie bardzo mi ona wychodzi.
Dla ćwiczeń ściągnąłem kawałek kodu html z pewnego forum, dużo postów, tematów itp, więc jest na czym ćwiczyć.

Tylko że gdy już doszedłem jak ściągnąć linki do tematów, to kompletnie nie mam pojęcia jak ściągnąć już jego tytuł, a wygląda to tak:
<a id="tid-link-11293" href="http://forum.php.pl/index.php?showtopic=152001&st=0" title="Temat założono: pią, 21 maj 2010 - 15:01">Co zamiast Krasnala?</a>

Moje wyrażenie wygląda tak:
{(http:\/\/[a-zA-Z0-9\.\-\_]+[a-zA-Z0-9\.\?\-\/][\&]?.+showtopic=[0-9]+[^a-zA-Z])}
co prawda wybiera mi adres, ale dopiero po obróbce w php ma on postać http://forum.php.pl/index.php?showtopic=152001, bo moje wyrażenie ściąga też różne inne śmieci typu title, jakieś nawiasy itp.

Mając <a href="http://domena.pl/NAZWA_USERA-mID.html">Nazwa Usera</a> Nie mam pojęcia jak wyciągnąć samą nazwę przy użyciu wyrażenia.
A o treści posta już nawet mogę zapomnieć.
Próbowałem różnych kombinacji, ale niestety żadna nie działa, albo ściąga nie te dane co bym chciał.

Do loginu np próbowałem
"<span .* class="normalname".*><a .*>([a-zA-Ząćęń󿟥ĆĘŃÓŻŹ0-9\-\_\.])</a></span>" <-- przeróbka kodu html

Czy mógłbym mi ktoś wytłumaczyć na przykładzie jak zrobić te 3 wyrażenia żeby działało poprawnie?

Czytałem chyba na 6 stronach o tych wyrażeniach, i jakoś dalej nie bardzo czaje co,jak i do czego ma być sad.gif

(użyłem w przykładzie linku do tego forum, w oryginale jest do innego)
kchrapa
Hejka!

  1.  
  2.  
  3. $v_link='<a id="tid-link-11293" href="http://forum.php.pl/index.php?showtopic=152001&st=0" title="Temat założono: pią, 21 maj 2010 - 15:01">Co zamiast Krasnala?</a>';
  4.  
  5. //kluczem do rozwiazania (jednego z wielu - ale calkiem wygodnego ;-) jest wykorzystanie klasy znakowej [] oraz negacji wewnatrz klasy znakowej ^
  6.  
  7. //Idac od lewej strony - analiza wzorca
  8. //1) zacznij od <a id="
  9. //2) nastepnie [^"] - cokolwiek co nie jest cudzyslowem
  10. //3) [^"]+ cokolwiek co nie jest cydzyslowem jeden lub wiecej razy
  11. //4) ([^"]+) - zapamietaj powyzsze (dzieki nawiasom okraglym)
  12. //5) "\s+ - zamkniecie cydzyslowu oraz dowolna ilosc bialych znakow (min. 1)
  13. //6) powtorz powyzsze manewry dla href i title
  14. //7) na podobnej zasadzie, wyciagnij opis linku ([^<]+) - cokolwiek co nie jest zamknieciem dowolna ilosc razy i zapamietaj
  15.  
  16. preg_match('/<a id="([^"]+)"\s+href="([^"]+)"\s+title="([^"]+)">([^<]+)<\/a>/',$v_link,$a_wyniki);
  17.  
  18. //wyciagaj kolejne zapamietane elementy (od lewej, kolejne nawiasy)
  19. echo $a_wyniki[1] . "<br>"; //id
  20. echo $a_wyniki[2] . "<br>"; //adres
  21. echo $a_wyniki[3] . "<br>"; //tytul
  22. echo $a_wyniki[4] . "<br>"; //tekst wyswietlany jako link
  23.  
  24. //tutaj podobnie - jesli chcemy wyciagnac tylko to co pomiedzy > oraz </a>
  25. $v_link2=' <a href="http://domena.pl/NAZWA_USERA-mID.html">HansKloss</a>';
  26. preg_match('/>([^<]+)<\/a>/',$v_link2,$a_wyniki2);
  27. echo $a_wyniki2[1];
  28.  
  29.  


Pozdrowka ,
Kacper Chrapa

scaper
Ok, wielkie dzięki ;D
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.