Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyrażenia regularne - znaki nowej lini
Forum PHP.pl > Forum > PHP
bobek358
Witam

Mam mały problem z wyrażeniami regularnymi.
Przez cURL pobieram stronę i wyrażeniami regularnymi pobieram z niej interesujące mnie fragmenty.

Przykład danych które mnie interesują maja postać:

  1. <TR>
  2. <td class="rms_quicklink">1</td>
  3. <td class="rms_quicklink">mmmmm</td>
  4. <td class="rms_quicklink">06/11/2012</td>
  5. <td class="rms_quicklink">15:39:51</td>
  6. <td class="rms_quicklink">
  7. Przesyłka doręczona </td>
  8. <TD class="rms_quicklink">
  9.  
  10.  
  11.  
  12. </TD>
  13. </TR>
  14.  
  15. <TR>
  16. <td class="rms_quicklink">2</td>
  17. <td class="rms_quicklink">Wydanie paczki kurierowi - HH</td>
  18. <td class="rms_quicklink">06/11/2012</td>
  19. <td class="rms_quicklink">07:37:09</td>
  20. <td class="rms_quicklink">
  21. Przesyłka wychodząca z sortowni </td>
  22. <TD class="rms_quicklink">
  23.  
  24.  
  25.  
  26. </TD>
  27. </TR>
  28.  
  29. <TR>
  30. <td class="rms_quicklink">3</td>
  31. <td class="rms_quicklink">Linehaul: przyjęcie</td>
  32. <td class="rms_quicklink">06/11/2012</td>
  33. <td class="rms_quicklink">07:16:48</td>
  34. <td class="rms_quicklink">
  35. Przesyłka wchodząca do sortowni </td>
  36. <TD class="rms_quicklink">KTW
  37.  
  38.  
  39.  
  40. </TD>


I teraz wyciągam je poniższym kodem:
  1. <td class=\"rms_quicklink\">(.*)</td>
  2. <td class=\"rms_quicklink\">(.*)</td>
  3. <td class=\"rms_quicklink\">(.*)</td>
  4. <td class=\"rms_quicklink\">(.*)</td>
  5. <td class=\"rms_quicklink\">
  6. (.*)</td>
  7. <TD class=\"rms_quicklink\">(.*)
  8.  
  9.  
  10.  
  11. </TD>@", $this -> pobrane_dane, $out);


Niestety w tych dwóch ostatnich kolumnach występują znaki nowej linii i nie działa to do końca jak chciałem.
I tutaj pytanie - jak zamienić to wyrażenie aby nie było problemu ze znakami nowej linii?
b4rt3kk
Tam gdzie może być znak nowej linii daj:

  1. ([\s.]*)
bobek358
Niestety gdy zmienię (.*) na ([\s.]*) niestety preg_match_all nic nie pobiera sad.gif
CuteOne
Więc najpierw usuń entery a dopiero potem potraktuj zwrócony kod preg_*
  1. $string = 'twoj
  2. string';
  3. $strip = strtr($string, array("\r"=>"", "\n"=>"", "\r\n"=>""));
  4. preg_*($strip ..);
Sephirus
Jeśli ich nie usuniesz i dasz odpowiednio te "\s" to dodaj też do samego prega flagę "s" czyli '@....@s'
bobek358
Najlepiej usunąłem wszystkie entery i znaki tabulacji i jest niby ok.
Mam tylko jeden problem - na lokalnym serwerze jest ok jednak jak wgram na serwer to jednak nie działa do końca ok.
Przy niektórych danych jest ok a a przy innych nie pobiera - są jakies opcje w php.ini które tyczą się wyrażeń regularnych?


Sprawdziłem - wgrałem na inny serwer gdzie jest 5.3 i tak działa jednak na serwerze z php 5.2 niestety raz działa raz nie.
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.