Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Problem z preg_match_all
pytak2
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 20.07.2009

Ostrzeżenie: (0%)
-----


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?

Ten post edytował erix 21.08.2009, 15:22:58
Powód edycji: [erix] to nie ma nic wspólnego z OOP
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
ersiu
post
Post #2





Grupa: Zarejestrowani
Postów: 7
Pomógł: 0
Dołączył: 27.08.2007

Ostrzeżenie: (0%)
-----


oznacz pattern jako, litery a-z, cyfry 0-9 : )
Go to the top of the page
+Quote Post
pytak2
post
Post #3





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 20.07.2009

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/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?
Go to the top of the page
+Quote Post
marcinpruciak
post
Post #4





Grupa: Zarejestrowani
Postów: 161
Pomógł: 9
Dołączył: 14.07.2008

Ostrzeżenie: (0%)
-----


  1. $div = preg_match_all('/(<div class="videoplayer">)(.*)(<\/div>)/',$file,$patterns);
Go to the top of the page
+Quote Post
pytak2
post
Post #5





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 20.07.2009

Ostrzeżenie: (0%)
-----


a przetestowałeś ten kod? Ja to zrobiłem i stwierdzam, że nie daje pożądanego efektu
Go to the top of the page
+Quote Post
erix
post
Post #6





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Użyj preg_quote i zobacz, gdzie jeszcze trzeba postawić backslashe.
Go to the top of the page
+Quote Post
pytak2
post
Post #7





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 20.07.2009

Ostrzeżenie: (0%)
-----


ale przeciez jako ograniczniki uzywam hash'y więc nie musze uzywac backslashow ;p
Go to the top of the page
+Quote Post
erix
post
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




  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.
Go to the top of the page
+Quote Post
szagi3891
post
Post #9





Grupa: Zarejestrowani
Postów: 109
Pomógł: 9
Dołączył: 12.03.2007
Skąd: kraków/tarnobrzeg/baranów/suchorzów

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 4.10.2025 - 21:01