Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]preg_match problem z dopasowaniem
Forum PHP.pl > Forum > Przedszkole
daedin
Chyba zgłupiałem bo nie rozumiem dlaczego:
  1. preg_match_all('/TD/', $table, $matches);

daje:
  1. Array
  2. (
  3. [0] => Array
  4. (
  5. [0] => TD
  6. [1] => TD
  7. [2] => TD
  8. [3] => TD
  9. )
  10.  
  11. )

natomiast:
  1. preg_match_all('/TD.*TD/', $table, $matches);

daje
  1. Array
  2. (
  3. [0] => Array
  4. (
  5. )
  6.  
  7. )


Czy ktoś może mnie jakoś nakierować na rozwiązanie tego problemu?
!*!
  1. preg_match_all('/TD(.*)TD/', $table, $matches);


Musisz grupować.
daedin
  1. preg_match_all('/TD(.*)TD/', $table, $matches);

również nie znajduje dopasowania:
  1. Array
  2. (
  3. [0] => Array
  4. (
  5. )
  6.  
  7. [1] => Array
  8. (
  9. )
  10.  
  11. )
!*!
A co to jest $table ?
daedin
  1. <TABLE cellSpacing=3 cellPadding=5 width="100%" border=0>
  2. <TR>
  3. <TD vAlign=top width="50%"><EM><STRONG>Tekst</STRONG></EM>Tekst<BR>
  4. <EM>Tekst</EM> Tekst<br>
  5. <EM>Tekst</EM> Tekst<br>
  6. <EM>Tekst</EM> Tekst
  7. </TD>
  8.  
  9. <TD vAlign=top width="50%"><EM><STRONG>Tekst</STRONG></EM> Tekst<BR>
  10. <EM>Tekst</EM> Tekst<br>
  11. <A href="link"><EM>Tekst</EM> Tekst</A><br>
  12. <EM>Tekst</EM> Tekst<br>
  13. <EM>Tekst</EM> Tekst<br>
  14. <EM>Tekst</EM> Tekst<br>
  15. </TD></TR>
  16.  
!*!
pregi nie służą do operacji na znacznikach tzn. nie w takiej formie że wpisujesz TD i już jest. Musisz napisać wyrażenie regularne, które pobierze dane ze znaczników. Przykład masz w dokumentacju

Cytat
/<td>(.*)</td>/


Coś w tym kierunku.
daedin
Rozumiem, że nie wystarczy samo TD, że to musi być trochę bardziej złożone dopasowanie.

  1. preg_match_all('/<td>(.*)</td>/', $table, $matches);

wywala mi coś takiego:
Warning: preg_match_all() [function.preg-match-all]: Unknown modifier 't'
więc wnioskuje, że poprawnie będzie tak:
  1. preg_match_all('/\<TD>(.*)\<\/TD>/', $table, $matches);

lecz to nie znajduje dopasowania, a zdawałoby się, że to powinno być proste.
!*!
  1. preg_match_all('/\<TD\>(.*)\<\/TD\>/', $table, $matches);


albo

  1. preg_match_all('/^\<TD\>(.*)\<\/TD\>$/', $table, $matches);


Nie wspominając już o tym że pierwszy znacznik musi mieć (.*)? Ponieważ tag może zawierać css itd.
daedin
Tego css'a przewidziałem dlatego na początku wpisałem tylko /TD(.*)TD/ dla uproszczenia. U mnie żadna z powyższych sugerowanych opcji nie znajduje dopasowania. A u Ciebie?

Edit:
Z tego co wiem ^i$ to znaki początku i końca, więc nie powinny być konieczne, ja wpisałem:
Kod
preg_match_all('/\<TD(.*)\<\/TD\>/', $table, $matches);

i nic...

Cytat
pregi nie służą do operacji na znacznikach tzn. nie w takiej formie że wpisujesz TD i już jest.

A co innego zamiast pregów mogę wykorzystać?
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.