Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP]Regexp - jak wyciaganc tylko tekst
Forum PHP.pl > Forum > Przedszkole
dolar
MAm taki oto zapis z html:

  1. <div class="latestItemIntroText">
  2.  
  3. <div class="itemLinks">
  4. <div class="share">Share</div>
  5. <div class="dummy-div"></div>
  6.  
  7. <div class="addthis_sharing_toolbox"></div>
  8.  
  9.  
  10. </div> (</p> ---> to moze byc lub nie)
  11.  
  12. Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
  13. (<br /><br />) -> tutaj tez czasem moze byc lub nie jakas br lub cokolwiek
  14. ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum
  15.  
  16. </p><br/> --> to tez moze sie pojawic lub nie </div>


Jak do tej pory mam taki zapis:

<div class="addthis_sharing_toolbox"><\/div>([ \s?]+)<\/div>([^<]+)<\/div>

To mi ladnie wyciaga tekst, ale bez <p>, bo jesli znajdzie sie tam pomiedzy <p> lub <br/> to juz jest problem i mi nie wyciaga textu. Jak mozna ulepszyc moj zapis regex? O ile da sie cos takiego w ogole wyciaganc...

viking
Wyrażenia regularne nie służą do obróbki DOM. Zainteresuj się funkcjami DOM typu simplexml.
dolar
Hmm nigdy o tym co mi napsiales jeszcze nie slyszalam i pewnie bede meic sporo pracy nad tym... no ale coz jak sie nie da regexp to poczytam o tych DOM cokolwiek to jest ;p tylko ze moj plik to htlm jest...
bostaf
Cytat(viking @ 24.05.2017, 11:10:32 ) *
Wyrażenia regularne nie służą do obróbki DOM. Zainteresuj się funkcjami DOM typu simplexml.

Ja się po tym podpisuję, i zasugerowałbym też hasło "html/dom parser", ale dla zabawy zrobiłem tego regexa:
Kod
<div class="addthis_sharing_toolbox"><\/div>\s+<\/div>((^|.|\s)+)<\/div>

sam tekst czyli to co w regexie w nawiasie wyciągniesz w php preg_match (parametr matches), a te zbędne tagi wewnątrz tekstu strip_tags. Samym regexem nie da się pominąć fragmentów tekstu.
dolar
@bostav @vikinh - dzieki za podpowiedz. Wlasnie czytam o tych DOM'ach. Juz na samym starcie mam problem, gdyz jak probuje uzyc funkcji :
  1. $html = file_get_html($link);


To mam error :

l error: Uncaught Error: Call to undefined function file_get_html() in /one.php:243 Stack trace: #0 {main} thrown in /one.php on line 243

Czy to wina mojego edytora ze nie zna tej funkcji?
viking
Wypadało by wcześniej dołączyć pliki biblioteki simple html.
dolar
Cytat(viking @ 24.05.2017, 14:17:41 ) *
Wypadało by wcześniej dołączyć pliki biblioteki simple html.


Fakt, wlasnie sciagnelam te pliki... hmm a jak je powinnam dlaczyc? teraz mam ten plik w Pobranych dokumentach. Mam go przeniesc do swojego projektu rozuemim?

Dobra dalam rade... jade dalej z kodem

No dobra chce wyciaganc ten zakichany tekst stad:

  1. <div class="latestItemIntroText">
  2.  
  3. <div class="itemLinks">
  4. <div class="share">Podziel się</div>
  5. <div class="dummy-div"></div>
  6.  
  7. <div class="addthis_sharing_toolbox"></div>
  8.  
  9. </div>
  10. Mamy dobre informacje dla stojących w dużym korku w okolicach miejscowości Nowak. Ruch jest już odblokowany, powoli sytuacja powinna się polepszać. <br /><br />Jak informują nas drogowcy, ruch zostanie jeszcze raz chwilowo wstrzymany, ale tylko na czas załadowania samochodów na lawetę.
  11.  
  12. </div>
  13.  
  14. <div class="clr"></div>
  15.  


Tak sobie ktos zaprojektowal strone i stad musze wyciaganc. Probuje tak:

$info['opis']= $html->find('.addthis_sharing_toolbox div');

Ale zwraca pusta tablice.
Pyton_000
Kod
<div class="addthis_sharing_toolbox"></div>

Ciekawe dla czego...
Lepiej poszukaj `.latestItemIntroText`
dolar
$html->find('.latestItemIntroText')->innertext;

Dalej null
Pyton_000
var_dump($html->find('.latestItemIntroText'));
dolar
No dobra, a czy jest mozliwosc tym DOM'em zrobic wyjatek z tej mojej klasy i nie wyciagac tekstu "Share"? Bo tez mi go pobiera jako text tegoz diva

Ktokolwiek? sad.gif
viking
simplehtml nie obsługuje selektora :not.
Możesz usunąć po prostu ten tekst albo np za pomocą biblioteki phpquery:
  1. $xml = phpQuery::newDocumentHTML($html);
  2. pq('.itemLinks')->remove();
  3. $x = pq('.latestItemIntroText');
  4. echo $x[0]->text();
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.