Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Problem z preg_match_all
Forum PHP.pl > Forum > PHP
pytak2
z kodu:
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2.  
  3.  
  4.  
  5. <link href="http://www.eonline.pl/css/tpl_style.css" rel="stylesheet" type="text/css" />
  6. <!--[if IE]><link href="http://www.eonline.pl/css/tpl_ie_6.css" rel="stylesheet" type="text/css" media="screen" /><![endif]-->
  7. <!--[if IE 7]><link rel="stylesheet" type="text/css" href="http://www.eonline.pl/css/tpl_ie_7.css" /><![endif]-->
  8.  
  9. <!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
  10. </head>
  11.  
  12.  
  13. <div id="head">
  14. <h3>
  15. [...]
  16.  
  17. <div class="videoplayer">
  18.  
  19. <b> Polska wersja </b>
  20.  
  21. <object width="432" height="351"><param name="movie" value="http://www.megavideo.com/v/VO8FZCAZ15229a5212a8b9017f255931e1a21a52.7281478132.0"></param><param name="wmode" value="transparent"></param><embed src="http://www.megavideo.com/v/VO8FZCAZ15229a5212a8b9017f255931e1a21a52.7281478132.0" type="application/x-shockwave-flash" wmode="transparent" width="432" height="351"></embed></object>
  22.  
  23. <b>Wersja anglojęzyczna</b>
  24.  
  25. <embed src="http://player.youku.com/player.php/Type/Folder/Fid/1675905/Ob/1/Pt/0/sid/XMTU2MTUyODA=/v.swf" quality="high" width="480" height="400" align="middle" allowScriptAccess="allways" mode="transparent" type="application/x-shockwave-flash"></embed>
  26. </div>
  27. <div class="clear">
  28. </div>
  29. </div>
  30. </div>
  31.  
  32. [....]
  33. <p class="semore"><A href="http://www.eonline.pl/tags">Więcej Tagów</A></p>
  34. </div>
  35. <div class="clear"></div>
  36. </div>
  37. </div> <!-- end div richfooter -->
  38.  
  39. <div id="footer">
  40. <div id="footcontainer">
  41. <p>
  42.  
  43. <A href="http://www.eonline.pl/about">O nas</A> |
  44. <A href="http://www.eonline.pl/help">Pomoc</A> |
  45. <A href="http://www.eonline.pl/advertise">Kontakt</A> |
  46. <A href="http://www.eonline.pl/terms">Warunki korzystania z serwisu</A> |
  47. <A href="http://www.eonline.pl/privacy">Polityka prywatności</A> |
  48. <A href="http://www.eonline.pl/rss"><img src="http://www.eonline.pl/images/rss.gif" align="absmiddle" border="0" /></A> | 1772 Uzytkowników online
  49. </p>
  50. <p>Copyright &copy; 2006-2008 <A href="http://www.eonline.pl">Filmy online, za darmo, najnowsze filmy i premiery kinowe, Seriale online przez internet</A>. All rights reserved.</p>
  51.  
  52. <p>Powered By ClipShare</a></p>
  53. </div>
  54. </div>
  55.  
  56. </body>
  57. </html>

Chcialbym wyciągnąć wszystko co jest pomiędzy:
  1. <div class="videoplayer">

i
  1. </div>

a więc piszę:
  1. class VIDEO {
  2. public function getInformationVideo() {
  3. for($i=1;$i<=10;$i++) {
  4. $content=file_get_contents("http://www.eonline.pl/video/".$i);
  5.  
  6. $pattern='#<div style="border: 1px dotted rgb(255, 0, 0); margin: 10px 0px; padding: 5px; width: 728px; text-align: center; font-weight: bold; font-size: 14px; color: rgb(255, 0, 0);"> Film nie istnieje. Został usunięty lub oznaczony jako niewłaściwy! </div>#sie';
  7. preg_match_all($pattern, $content, $result);
  8.  
  9. if(empty($result)) {
  10. unset($result);
  11. } else {
  12.  
  13. $aaa=preg_match_all('#<div class="videoplayer">(.*?)</div>#sie', $content, $matches[$i-1]);
  14.  
  15. unset($result);
  16. }
  17. }
  18.  
  19. echo '<pre>';
  20. print_r($matches);
  21. echo '</pre>';
  22.  
  23. }
  24. }


1. Nie dostaję tego czego chcę
2. Powstaja dziwnie zagnieżdżone tablice. Dlaczego?
3. Jak usunąć wszystkie białe znaki z kodu:
  1. <b> Polska wersja </b>
  2.  
  3. <object width="432" height="351"><param name="movie" value="http://www.megavideo.com/v/VO8FZCAZ15229a5212a8b9017f255931e1a21a52.7281478132.0"></param><param name="wmode" value="transparent"></param><embed src="http://www.megavideo.com/v/VO8FZCAZ15229a5212a8b9017f255931e1a21a52.7281478132.0" type="application/x-shockwave-flash" wmode="transparent" width="432" height="351"></embed></object>
  4.  
  5. <b>Wersja anglojÄzyczna</b>
  6.  
  7. <embed src="http://player.youku.com/player.php/Type/Folder/Fid/1675905/Ob/1/Pt/0/sid/XMTU2MTUyODA=/v.swf" quality="high" width="480" height="400" align="middle" allowScriptAccess="allways" mode="transparent" type="application/x-shockwave-flash"></embed>

tak zeby otrzymać w rezultacie stringa umieszczonego w jednej linijce bez żadnych enterów, spacji, tabów?
ersiu
oznacz pattern jako, litery a-z, cyfry 0-9 : )
pytak2
Cytat
Powód edycji: [erix] to nie ma nic wspólnego z OOP

Jakby nie patrzeć to problem nie ma nic wspólnego z OOP ale kod jest obiektowy smile.gif

Cytat
oznacz pattern jako, litery a-z, cyfry 0-9 : )

Jeżeli miales na mysli coś w stylu:
  1. #<div class="videoplayer">[a-zA-z0-9]*</div>#sie

To to niestety daje mi pustą tablicę...

A więc gdzie popelnilem błąd i co z tymi bialymi znakami?
marcinpruciak
  1. $div = preg_match_all('/(<div class="videoplayer">)(.*)(<\/div>)/',$file,$patterns);
pytak2
a przetestowałeś ten kod? Ja to zrobiłem i stwierdzam, że nie daje pożądanego efektu
erix
Użyj preg_quote i zobacz, gdzie jeszcze trzeba postawić backslashe.
pytak2
ale przeciez jako ograniczniki uzywam hash'y więc nie musze uzywac backslashow ;p
erix
  1. nie mam na myśli ograniczników, a znaki specjalne W ŚRODKU; użyj preg_quote, to wtedy zrozumiesz
  2. nie pisałem o hashach/slashach, tylko backslashach.
szagi3891
Skoro to jest strona w xhtml napisana to najlepiej potraktować te dane jako plik xml, a potem za pomocą prostego wyrażenia xpath wyciągnąć zawartość odpowiedniego div-a.
Wyrażenia regularne w takim przypadku są zbyt zawodne (ze względu na napisanie takiego które zadziała poprawnie). Reszta to tylko odpowiednie wykonanie.
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.