Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z wyrażeniem regularnym
Forum PHP.pl > Forum > PHP
latata
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
lashus
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
szagi3891
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ść"
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.