Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> problem z wyrażeniem regularnym
latata
post
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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) mam nadzieje że dobrze to wytłumaczyłem (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)
Go to the top of the page
+Quote Post
lashus
post
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ę (IMG:http://forum.php.pl/style_emoticons/default/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ć (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Ten post edytował lashus 29.04.2009, 18:31:36
Go to the top of the page
+Quote Post
szagi3891
post
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ść"
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 23.08.2025 - 10:48