Mam problem! Potrzebuję zaadaptować do mojego kodu proste rozpoznawanie cytatów. Wiem, że jest trochę tego na forum bo przeglądałem tematy i znalazłem kilka rozwiązań gotowych BBCodów - parserów - ale nie mają one cytatow z przypisaniem chociażby nazwy. Nie wiem niestety jak to zmodyfikować więc zacząłem metodą prób i błędów. Poniżej przedstawiam kod moich osiągnięć który jest żaden, ponieważ umiem rozpoznać wyrażeniem regularnym interesujące mnie fragmenty ale nie wiem jak je później w locie poprawić na prawidłowe - sprarsowane kodem <html>:

  1. $text = '[quotee=slawek]asdasdasdas[/quotee] asds asd ds asda sdsad [quotee=jacek]sdsdsdjacek[/quotee]';
  2. //wyrażenie regularne poszukujące:
  3. $szukaj10 = "/\[quotee=(.*?)\](.*?)\[\/quotee\]/i";
  4.  
  5. if(preg_match_all($szukaj10, $text, $znalazlem)){
  6.  
  7.  
  8. print_r($znalazlem);
  9. }


Ten kod wyszukuje mi prawidłowo wszystkie cytaty niestety nie wiem jak się zabrać do ich przetworzenia - prawidłowo. W Manualu znalazłem coś takiego co próbowałem zaadaptować ale niestety nie działa

  1. $input = "plain [quotee=slawek] slawek1 [quotee=marcin] deeper [/quotee] deep [/quotee] plain";
  2.  
  3. function parseTagsRecursive($input)
  4. {
  5.  
  6. $regex = '#\[quotee]((?:[^[]|\[(?!/?quotee])|(?R))+)\[/quotee]#';
  7. $szukaj10 = "/\[quotee=(.*?)\](.*?)\[\/quotee\]/i";
  8.  
  9. if (is_array($input)) {
  10. $input = '<div style="margin-left: 10px">'.$input[1].'</div>';
  11. }
  12.  
  13. return $input;//preg_replace_callback($szukaj10, 'parseTagsRecursive', $input);
  14. }
  15.  
  16. $output = parseTagsRecursive($input);
  17.  
  18. echo $output;


Czy możecie coś jasno podpowiedzieć - 3 dzień walczę już z BBCodem i parserem sad.gif - Dziękuję

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Co prawda nie ładnie sam sobie odpowiadać ale postanowiłem, że napisze. Cały dzień dziś myślałem jak to rozwiązać i się zapętliłem. Jadąc samochodem nie patrząc na komputer rozwiązałem problem w kilka minut. Cała sprawa jest prosta, nawet bardzo.

Wystarczy zastosować jeszcze pętle for i wykonać licznik. Poniżej przedstawiam kod jaki napisałem. Temat myślę, że nie jest zamknięty i proponuje o podawanie w odpowiedziach innych ciekawych rozwiązań tego problemu. Pozdrawiam:

  1. $match_count = preg_match_all($szukaj10, $text, $znalazlem);
  2.  
  3. echo("Kontronlie wyświetlam: Ile $match_count<br>");
  4.  
  5.  
  6. for ($i = 0; $i < $match_count; $i++)
  7. {
  8. $oryginalny_ciag[] = $znalazlem[0][$i];
  9. //$zamienNaciag = '<div>Napisał: '.$znalazlem[1][$i];.'</div>';
  10. $zamienNaciag[] = '<div class="quote_wrapper"><div class="quote_title">Napisał: '.$znalazlem[1][$i].'</div><div class="quote_area">'.$znalazlem[2][$i].'</div></div>';
  11. }
  12.  
  13. $text = str_replace($oryginalny_ciag, $zamienNaciag, $text );
  14.  
  15.  
  16. echo("<br><br>Sparsowany: $text <br><hr>");