Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]preg_match nie zwraca ciągu
Forum PHP.pl > Forum > Przedszkole
red9skull
  1. preg_match( '@<div class="newsContent">(.*)</div>@', $data, $news_kod );


Tym kodem chcę wyciągnąć treść z tego:
  1. <div class="newsContent">
  2. <img src="http://www.dobreprogramy.pl/ImagePublications/News/Static/microsoft.gif" border="0" class="newsIcon" alt="NewsImage" />
  3. <p>Microsoft <a href="http://www.microsoft.com/presspass/press/2010/feb10/02-25MSPanasonicPR.mspx?rss_fdn=Press%20Releases">zawarł umowę</a> z firmą Panasonic o udzieleni licencji na wykorzystanie systemu plików exFAT (Extended File Allocation Table). Szczegóły finansowe porozumienia nie zostały ujawnione. Dodatkowo Microsoft udzielił także licencji na format FAT32 z obsługą długich nazw plików.</p>
  4.  
  5. <p>Według Microsoftu umowa jest przykładem na to, że Microsoft jest chętny do udostępniania wartościowej własności intelektualnej aby zwiększać poziom innowacyjności w państwie (USA). W <a href="http://www.dobreprogramy.pl/Microsoft-chce-popularyzacji-exFAT,Aktualnosc,15697.html">grudniu</a> w ramach popularyzacji formatu exFAT Microsoft udostępnił firmom Canon, Sanyo i SanDisk, pobierając od każdej z nich 300 tysięcy dolarów.</p>
  6.  
  7. <p>exFAT, znany też jako FAT64, oferuje możliwość zapisywania bardzo dużych plików. W jego przypadku limit wynosi 64 ZB, podczas gdy dla FAT32 były to zaledwie 4 GB. Podobnie jak w NTFS możliwe jest ustawianie uprawnień do plików. Jest też większa swoboda zapisywania czasu, może być on zapisywany jako UTC i z rozdzielczością 1/100 sekundy. Opcja ta jest przydatna np. przy wykonywaniu zdjęć seryjnych. Choć jest to dokładność 200 razy większa niż w przypadku FAT32 i jednak i tak daleko jej do NTFS, gdzie czas zapisu/modyfikacji pliku jest zapisywany z rozdzielczością 100 ns. Obsługiwane są też transakcje, które zabezpieczają przed błędami zapisu. Jeśli wystąpi błąd zapisu, jest on wycofywany w całości. Nie ma więc sytuacji w której zapisu dokonano jedynie częściowo.</p>
  8. <div class="newsSource">Źródło: <a target="_blank" href="http://www.theregister.co.uk">The Register</a></div>
  9. </div>
  10. <div class="newsOptions">
  11. <a id="ctl00_phContent_NewsList_repNewsList_ctl00_hpPublicationsLinkComment" class="komentarze" href="http://www.dobreprogramy.pl/Microsoft-udostepnia-exFAT-firmie-Panasonic,Aktualnosc,16824.html#komentarze"><span class="icon">&nbsp;</span>komentarze (23)</a>
  12. <a id="ctl00_phContent_NewsList_repNewsList_ctl00_hpRelated" class="pokrewne" href="http://www.dobreprogramy.pl/Szukaj.html?q=exfat"><span class="icon">&nbsp;</span> podobne</a>
  13. </div>
  14. <div class="clear"></div>
  15. </div>

Ale var_dump($news_kod) zwraca: array(0) { }
WebCM
Wyrażenia regularne nie są odpowiednim narzędziem do wyciągania treści z HTML-a. Kod wyciągnie pierwszy fragment między <div class="newsContent"> a ostatnim </div> w zmiennej. Jeśli się upierasz, musisz dodać parametr s. Wtedy kropka pasuje do każdego znaku, w tym znaku nowej linii. Opcjonalnie i = bez sprawdzania wielkości znaków.
  1. @<div class="newsContent">(.*)</div>@is
red9skull
Cytat(WebCM @ 27.02.2010, 11:30:11 ) *
Wyrażenia regularne nie są odpowiednim narzędziem do wyciągania treści z HTML-a.

To co polecasz?

Dobra, mam taki ciąg:
  1. <div class="news" id="news_1">
  2. <div class="mainBar">
  3. <a href="#news_2"><img src="http://www.dobreprogramy.pl/App_Themes/Green/Images/content_third_one_arrow.png" class="newsNavigator" alt="Przeskocz" /></a>
  4. <h2 class="title"><a id="ctl00_phContent_NewsList_repNewsList_ctl00_hpPublicationsLink" href="http://www.dobreprogramy.pl/Microsoft-udostepnia-exFAT-firmie-Panasonic,Aktualnosc,16824.html">Microsoft udostępnia exFAT firmie Panasonic</a></h2>
  5. <div class="newsInfo">26.02.2010 20:45, Autor: <a href="OVortalu.html#redakcja">Grzegorz Niemirowski (gniemirowski)</a></div>
  6. </div>
  7. <div class="newsContent">
  8. <img src="http://www.dobreprogramy.pl/ImagePublications/News/Static/microsoft.gif" border="0" class="newsIcon" alt="NewsImage" />
  9. <p>Microsoft <a href="http://www.microsoft.com/presspass/press/2010/feb10/02-25MSPanasonicPR.mspx?rss_fdn=Press%20Releases">zawarł umowę</a> z firmą Panasonic o udzieleni licencji na wykorzystanie systemu plików exFAT (Extended File Allocation Table). Szczegóły finansowe porozumienia nie zostały ujawnione. Dodatkowo Microsoft udzielił także licencji na format FAT32 z obsługą długich nazw plików.</p>
  10.  
  11. <p>Według Microsoftu umowa jest przykładem na to, że Microsoft jest chętny do udostępniania wartościowej własności intelektualnej aby zwiększać poziom innowacyjności w państwie (USA). W <a href="http://www.dobreprogramy.pl/Microsoft-chce-popularyzacji-exFAT,Aktualnosc,15697.html">grudniu</a> w ramach popularyzacji formatu exFAT Microsoft udostępnił firmom Canon, Sanyo i SanDisk, pobierając od każdej z nich 300 tysięcy dolarów.</p>
  12.  
  13. <p>exFAT, znany też jako FAT64, oferuje możliwość zapisywania bardzo dużych plików. W jego przypadku limit wynosi 64 ZB, podczas gdy dla FAT32 były to zaledwie 4 GB. Podobnie jak w NTFS możliwe jest ustawianie uprawnień do plików. Jest też większa swoboda zapisywania czasu, może być on zapisywany jako UTC i z rozdzielczością 1/100 sekundy. Opcja ta jest przydatna np. przy wykonywaniu zdjęć seryjnych. Choć jest to dokładność 200 razy większa niż w przypadku FAT32 i jednak i tak daleko jej do NTFS, gdzie czas zapisu/modyfikacji pliku jest zapisywany z rozdzielczością 100 ns. Obsługiwane są też transakcje, które zabezpieczają przed błędami zapisu. Jeśli wystąpi błąd zapisu, jest on wycofywany w całości. Nie ma więc sytuacji w której zapisu dokonano jedynie częściowo.</p>
  14. <div class="newsSource">Źródło: <a target="_blank" href="http://www.theregister.co.uk">The Register</a></div>
  15. </div>
  16. <div class="newsOptions">
  17. <a id="ctl00_phContent_NewsList_repNewsList_ctl00_hpPublicationsLinkComment" class="komentarze" href="http://www.dobreprogramy.pl/Microsoft-udostepnia-exFAT-firmie-Panasonic,Aktualnosc,16824.html#komentarze"><span class="icon">&nbsp;</span>komentarze (23)</a>
  18. <a id="ctl00_phContent_NewsList_repNewsList_ctl00_hpRelated" class="pokrewne" href="http://www.dobreprogramy.pl/Szukaj.html?q=exfat"><span class="icon">&nbsp;</span> podobne</a>
  19. </div>
  20. <div class="clear"></div>
  21. </div>
  22.  
  23. <div id="ctl00_phContent_NewsList_repNewsList_ctl00_pR" style="margin-top:-40px;margin-bottom:30px;">
  24.  
  25.  
  26. <div style="text-align:center;" class="noPrint">
  27. <div style="width: 300px;" class="rectangle">
  28. <span style="color: #A9A9A9;">r&nbsp;&nbsp;&nbsp;e&nbsp;&nbsp;&nbsp;k&nbsp;&nbsp;&nbsp;l&nbsp;&nbsp;&nbsp;a&nbsp;&nbsp;&nbsp;m&nbsp;&nbsp;&nbsp;a</span>
  29. <script type="text/javascript">
  30. //<![CDATA[
  31. OA_show('z49');
  32. //]]>
  33. </script>
  34. </div>
  35. </div>
  36.  
  37. </div>


Moje wyrażenie regularne:
  1. preg_match( '@<div class="newsContent">([0-9a-zA-ZąćęłńóśźżĄĆĘŁŃÓŚŹŻ:/ \*&\@!\?\+;,\.-_"\(\)\/=<>]+)</div>@is', $data, $news_kod );

Czego tu brakuje, lub co jest źle?
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.