Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> problem z wyrażeniem regularnym
latata
post 29.04.2009, 18:15:45
Post #1





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 24.11.2005

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


mam coś takiego:
  1. <?php
  2. preg_match_all('/<tr bgcolor=\"#cfcfcf\">(.*)</tr>/', $data, $result);
  3. ?>

jak zmienic wyrażenie regularne (a może inna funkcja?) aby w tablicy result nie otrzymywał wszystkiego od pierwszego "<tr bgcolor="#cfcfcf">" do ostatnego </tr> tylko od pierwszego "<tr bgcolor="#cfcfcf">" do najbliższego "</tr>" potem od nastepnego "<tr bgcolor="#cfcfcf">" do najbliższemu temu "</tr>" i tak dalej smile.gif mam nadzieje że dobrze to wytłumaczyłem tongue.gif
Go to the top of the page
+Quote Post
lashus
post 29.04.2009, 18:30:56
Post #2





Grupa: Zarejestrowani
Postów: 39
Pomógł: 9
Dołączył: 12.04.2008

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


Ostatnio miałem ten sam problem :| Nie jestem dobry z wyrażeń regularnych - praktycznie nie mam o nich bladego pojęcia, wiem tylko że istnieją - i jeśli nie muszę, nie korzystam z nich. Będę wdzięczny jeśli ktoś wytlumaczy to tutaj na przykładzie używając tych wyrażeń.

Jednakże jeśli nie mogłem sobie dać rady wyrażeniami regularnymi więc musiałem znaleźć inną drogę tongue.gif Proponuję ci to rozwiązać przez użycie pętli while i strpos oraz substr ^^.

Przykład:

Kod
while(($p = strpos($stog, '<tr bgcolor="#cfcfcf">', $k)) != false) {        
    
     // teraz znajdujemy koniec, poszukiwany od ostatniego $p - poczatka :P

    $k = strpos($stog, "</tr>", $p);

    // wycinamy to przez dodanie do poczatku znaleziska + dlugosc tego wyrazenia (w tym przypadku 22 znaki), dlugosc obliczamy przez odjecie konca od poczatku ^^

    $wartosci[] = substr($stog, $p+22, $k-($p+22));


jeśli gdzieś się nie kropnąłem z nawiasami to powinno podziałać smile.gif

Ten post edytował lashus 29.04.2009, 18:31:36
Go to the top of the page
+Quote Post
szagi3891
post 29.04.2009, 21:50:57
Post #3





Grupa: Zarejestrowani
Postów: 109
Pomógł: 9
Dołączył: 12.03.2007
Skąd: kraków/tarnobrzeg/baranów/suchorzów

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


proponuję tak :

  1. <?php
  2. $dane = '<tr bgcolor="#cfcfcf">cos</tr><tr bgcolor="#cfcfcf">cos2</tr><tr bgcolor="#cfcfcf">cos3</tr><tr bgcolor="#cfcfcf">cos4</tr>';
  3. preg_match_all('/<tr bgcolor=\"#cfcfcf\">(.*)</tr>/', $dane, $result);
  4. print_r($result);
  5. print '<hr/>';
  6. preg_match_all('/<tr bgcolor=\"#cfcfcf\">(.*)</tr>/U', $dane, $result);
  7. print_r($result);
  8. ?>


modyfikator "U" wyłącza "zachłanność"


--------------------

Każdy z was jest łodzią w której
Może się z potopem mierzyć
Cało wyjść z burzowej chmury
Musi tylko w to uwierzyć!
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: 19.07.2025 - 19:49