Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wyrazenia regularne pytanie
Forum PHP.pl > Forum > Przedszkole
alpin
Witam, mam taki problem, oto kod:

Orginalny string :
  1. <div class="filmRateInfo"><i class="icon-big-star"></i> <span class="filmRate"><strong rel="v:rating" property="v:average"> 7,5</strong>/10</span>


Potrzebuję wyciagnąć z niego "7,5" i napisałem takie wyrażenie regularne:

Wersja 1 - Działająca
  1. if( preg_match( '#<span class=[^<]+><strong rel="v:rating" property="v:average">([^<]+)</strong>#', $data, $out ) )
  2. {
  3. $info[ 'rate' ] = $out[ 1 ];
  4. }

Wersja 2 - Niedziałająca
  1. if( preg_match( '#<span class="filmRate"><strong rel="v:rating" property="v:average">([^<]+)</strong>#', $data, $out ) )
  2. {
  3. $info[ 'rate' ] = $out[ 1 ];
  4. }


Moje pytanie, dlaczego ta druga wersja niechce mi dzialac? probowalem na rozne sposoby ale jak tylko po class= dam cudzysłow koniec działania ;(

jaslanin
http://ideone.com/HsrZDw
http://ideone.com/tQtDAX

oba działają

ogólnie do takich rzeczy raczej używa się simplehtmldom
alpin
No wlasnie wedlug mnie powinny oba dzialac, a jednak jedna wersja mi nie dziala, moze na to miec np wplyw php ? uzywam wersji 5

Posiedzialem , pobawilem sie i doszedlem do czegos takiego :

Faktycznie jakby oba rozwiazania działaja ... ale gdy zrobie tak :
  1. <?php
  2.  
  3. $data = '<div class="filmRateInfo"><i class="icon-big-star"></i> <span class="filmRate"><strong rel="v:rating" property="v:average"> 7,5</strong>/10</span>';
  4.  
  5.  
  6. echo $data;
  7.  
  8. if( preg_match( '#<span class="filmRate"><strong rel="v:rating" property="v:average">([^<]+)</strong>/10</span>#', $data, $out ) )
  9. {
  10. echo $out[ 1 ];
  11. }
  12.  
  13. ?>


No to faktycznie działa, ale gdy robie to w funkcji korzystajac z curla juz mi to nie dziala .. ;( Wkleje kawalek kodu tej funkcji moze ktoś bedzie wiedział o co chodzi ...

  1. <?
  2. function getMovieInfo( $adres )
  3. {
  4. $curl = curl_init();
  5. curl_setopt($curl, CURLOPT_URL, "$adres");
  6. curl_setopt($curl, CURLOPT_COOKIE, "welcomeScreenNew=welcomeScreen" );
  7. curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
  8.  
  9. $data = curl_exec($curl);
  10.  
  11. $info = array();
  12.  
  13. if( preg_match( '#<span class="filmRate"><strong rel="v:rating" property="v:average">([^<]+)</strong>#', $data, $out ) )
  14. {
  15. $info[ 'rate' ] = $out[ 1 ];
  16. }
  17.  
  18. if( preg_match( '#<span id=filmYear class=halfSize>\(([0-9]+)\) </span>#', $data, $out ) )
  19.  
  20. {
  21. $info[ 'year' ] = $out[ 1 ];
  22. }
  23.  
  24.  
  25. return $info;
  26.  
  27. curl_close($curl);
  28. }
  29.  
  30. $adres="http://www.filmweb.pl/film/Beema-2003-118694";
  31. ?>
  32.  
  33. <pre> <? print_r (getMovieInfo($adres)); ?></pre>

Jak usune cudzyslowy z filmRate to działa.. ale jak juz usune wszystkie to znowu nie dziala, gdzie jest haczyk ?

Wklejając ten kod zauważyłem jeszcze jedna niezrozumiala dla mnie rzecz , otóż ten kod pobiera rok, chociaż chyba nie powinnien poniewaz jest
  1. <span id=filmYear class=halfSize>
a na stronie w kodzie źródłowym jest
  1. <span id="filmYear" class="halfSize">


O co w tym chodzi bo zgłupiałem, wyświetlałem tez cały plik $data no i pobiera ladnie cały kod źródłowy ale juz preg_match niedziała tak jak powinien....
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.