Witajcie, postanowiłem ponownie zagościć na forum, gdyż musiałem mój ostatni parser przerobić ze względu na zmianę struktury strony, z której parsowałem dane. I mam obecnie następujący problem.

Parsuję dane z przykładowej strony http://mateusz.pl/czytania/2010/20100407.htm
Najpierw ze znacznika <a href="#czytania">...</a> wyciągam do tablicy nazwy czytań, następnie staram się za pomocą funkcji preg_match_all i odpowiednich wyrażeń regularnych utworzonych na podstawie pozycji z ww. tabeli wyciągnąć interesujące mnie fragmenty.
Fragmenty są w znacznikach <p>(tu nazwa czytania)<br>tu tresc do wyciągnięcia</p>.

I teraz tak:
  1. $lessonsListPattern = "|<a href=\"#czytania\">.*</a>|"; //wzorzec zwracajacy liste czytan
  2. preg_match_all($lessonsListPattern,$site1,$return3);
  3. $lessons = $return3[0][0];
  4. $lessonsTab = explode(';',strip_tags($lessons));


i następnie tworzę w zależności od dnia:
  1. if ($dzien_czytan==0) {
  2. $ileCzytan = 3;
  3. $firstPattern = "|<p>\(".$lessonsTab[0]."\)<br>.*</p>|ismU";
  4. $secondPattern = "|<p>\(".$lessonsTab[2]."\)<br>.*</p>|ismU";
  5. $evangelionPattern = "|<p>\(".$lessonsTab[4]."\)<br>.*</p>|ismU";
  6. } else {
  7. $ileCzytan = 2;
  8. $firstPattern = "|<p>\(".$lessonsTab[0]."\)<br>.*</p>|ismU";
  9. $secondPattern = NULL;
  10. $evangelionPattern = "|<p>\(".$lessonsTab[3]."\)<br>.*</p>|ismU";
  11. echo $evangelionPattern;
  12. }


Dalej wyciągnięcie samej treści robię na zasadzie:
  1. preg_match_all($secondPattern, $site3, $tresc2);
  2. $tresc2[0][0] = ISO88592_2_UTF8($tresc2[0][0]);
  3. preg_match_all("/<br>.*<\/p>/ismU", $tresc2[0][0], $tresc12);
  4. echo $tresc12[0][0];


Problem jest w tym, iż działa to tylko za pierwszym razem - jeśli na przykład mam do wyciągnięcia 3 teksty, to pierwszy poprawnie wyciąga, a kolejne 2 tablice do których wczytuję fragmenty wg wzorców są puste... (sprawdzone var_dumpem). Myślałem, że może chodzi o kodowanie, ale dla niepolskich znaków też tak się dzieje. Próbuję już 2 godziny to poprawić i nic. Może ktoś ma pomysł, dlaczego to może nie działać? worriedsmiley.gif


Przykład:
<html>
później inne znaczniki
<p>(Dz 3,1-10)<br>tresc czytania 1</p>
cos innego
<p>(Łk 13,13-15)<br> tresc czytania 2</p> itd....

I po zastosowaniu preg_match_all dla pierwszego wzorca zwraca poprawnie czytanie 1, natomiast w drugim przejsciu petli i wywolaniu wzorca nr 2 nie pokazuje nic. (wzorzec zrobiony analogicznie do poprzedniego)