Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]preg_match problem z dopasowaniem
daedin
post 3.07.2012, 22:47:47
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 3.03.2011

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
!*!
post 3.07.2012, 22:49:56
Post #2





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


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


Musisz grupować.


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
daedin
post 3.07.2012, 22:52:54
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 3.03.2011

Ostrzeżenie: (0%)
-----


  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. )
Go to the top of the page
+Quote Post
!*!
post 3.07.2012, 22:53:24
Post #4





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


A co to jest $table ?


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
daedin
post 3.07.2012, 22:57:42
Post #5





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 3.03.2011

Ostrzeżenie: (0%)
-----


  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.  
Go to the top of the page
+Quote Post
!*!
post 3.07.2012, 22:59:49
Post #6





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


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.


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
daedin
post 3.07.2012, 23:10:25
Post #7





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 3.03.2011

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
!*!
post 3.07.2012, 23:13:30
Post #8





Grupa: Zarejestrowani
Postów: 4 298
Pomógł: 447
Dołączył: 16.11.2006

Ostrzeżenie: (0%)
-----


  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.


--------------------
Nie udzielam pomocy poprzez PW i nie mam GG.
Niektóre języki programowania, na przykład C# są znane z niezwykłej przenośności (kompatybilność ze wszystkimi wersjami Visty jest wiele warta).
Go to the top of the page
+Quote Post
daedin
post 3.07.2012, 23:19:32
Post #9





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 3.03.2011

Ostrzeżenie: (0%)
-----


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ć?

Ten post edytował daedin 3.07.2012, 23:31:16
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.07.2025 - 08:55