Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [regexp] Problem z [quote]
Forum PHP.pl > Forum > PHP
zdzichu
Witajcie
mój problem wygląda następująco:
  1. <?php
  2. $test = '[quote ]lorem ipsum[/quote ] dolor [quote:52cb3 ]sit[/quote:52cb3 ] [quote:129c ]amet[/quote ]';
  3. $pattern = '/[quote((?:.|\n)*)]((?:.|\n)*)[/quote((?:.|\n)*)]/';
  4. $string = preg_replace($pattern,'<blockquote>$2</blockquote>',$test);
  5. ?>

chciałbym, żeby rezultatem było:
Kod
<blockquote>lorem ipsum</blockquote> <blockquote>dolor</blockquote> <blockquote>sit</blockquote> <blockquote>amet</blockquote>

otrzymuje jednak tylko
Kod
<blockquote>amet</blockquote>

co robie nie tak? z gory dzieki za odpowiedzi
//dodałem celowo spacje w $test, bo forumowy parser chciał to przerabiać
Methestel
Próbowałem rozwiązać twój problem ale coś mi nie pasuje w twoim planie.
Dlaczego chcesz uzyskać:

  1. <blockquote>lorem  ipsum</blockquote> <blockquote>dolor</blockquote>  <blockquote>sit</blockquote>  <blockquote>amet</blockquote>

Dlaczego chcesz żeby "dolor" był w znaczniku <blackquote> skoro wcześniej nie był w znaczniku [quote]
zdzichu
fakt, mój błąd, napisane z rozpędu - chodzi o to, żeby znaczniki w [quote ] (które czasme ma po : jakieśtam dziwne alfanumeryczne znaki) były w <blockquote>
Methestel
No teraz to ma ręce i nogi.

  1. <?php
  2. $test = '[quote ]lorem ipsum[/quote ] dolor [quote:52cb3 ]sit[/quote:52cb3 ] [quote:129c ]amet[/quote ]';
  3. $pattern = "/[ *quote:?.*? *](.*?)[ */ *quote:?.*? *]/";
  4. $quote = preg_replace($pattern, "<blockquote>$1</blockquote>", $test);
  5. ?>

Zakladając że w znacznikach quote nie ma zadnych spacji:
  1. <?php
  2. $pattern = "/[quote:?.*?](.*?)[/quote:?.*?]/";
  3. ?>
zdzichu
witajcie- pojawił się kolejny problem - mianowicie jeśli w komentarzu jest zagnieżdzony komentarz, to niestety, nie działa to poprawnie - przykład:
  1. <?php
  2. $test = '[quote:12tlhglz]lorem
  3. ipsum
  4. [quote:12tlhglzz]lorem
  5. ipsum
  6. [/quote:12tlhglzz]
  7.  
  8. [/quote:12tlhglz]';
  9. $pattern = "/[quote(=(.*))?:?.*?](.*?)[/quote:?.*?]/s";
  10. $string = preg_replace($pattern,'<blockquote>$3</blockquote>',$test);
  11. ?>

wyświetla mi:
Kod
<blockquote>lorem ipsum [quote:12tlhglzz]lorem ipsum </blockquote> [/quote:12tlhglz]

zamiast:
Kod
<blockquote>lorem ipsum<blockquote>lorem ipsum </blockquote>  </blockquote>

może ktoś pomóc? z góry dzieki:)
tsharek
też miałem problem z takimi cytowaniami zagnieżdżonymi. Może przedstawie jak ja to mam, bo to też nie mój kod jest do końca:
  1. <?php
  2. $str=preg_replace_callback('# [(quote)(s=?.+?|=.+?)?] ( (?: (?(R) [^[]++ | [^[]*+) | (?R)) *) [/1] #x', 'parseTag', $str);
  3.  
  4.    function parseTag($data)
  5.    {
  6.        $data[3]=preg_replace_callback('# [(quote)(s=?.+?|=.+?)?] ( (?: (?(R) [^[]++ | [^[]*+) | (?R)) *) [/1] #x', 'parseTag', $data[3]);
  7.        return '<blockquote>Cytat'.($data[2]?' <b>'.substr($data[2], 1).'</b>':'').':<br />'.$data[3].'</blockquote>';
  8.    }
  9. ?>


może pomoże
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.