Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Wyszukanie ciągu otoczonego znacznikami
Forum PHP.pl > Forum > Przedszkole
mariusz g
witam,

mam taki wzorzec:

@\[codee](.*?)\[/codee]@


działa jeśli jest wszystko w jednej linii:
[codee] ala ma kota[/codee]

jeśli jest w kilku to nie działa:
[codee] ala ma kota
ala ma kota
ala ma kota[/codee]

Proszę o pomoc
Pozdrawiam
gargamel
Spróbuj dodać znak \n
Shili
W razie czego istnieje również możliwość dodania modyfikatora s za @ w Twoim przypadku

http://www.php.net/manual/en/reference.pcr...n.modifiers.php
Sephirus
hmm inaczej Ci to nie zadziała - daj najlepiej

Kod
@\[codee\](.*)\[/codee\]@sU


flaga "s" - wtedy jako "." będą też brane pod uwagę takie znaki jak \n i \r wink.gif
flaga "U" - zmiast "?" - ungreedy

mariusz g
witam,

bardzo dziękuję za pomoc
mam jeszcze jeden problem

jak do zamienionego ciągu zastosować funkcję htmlspecialchars
po prostu to co znajdzie wrzuca do div i do jego zawartości stosuje funkcję htmlspecialchars


  1. <?
  2. function create_php($text){
  3.  
  4. $wzorzec = '@\[CODEE](.*)\[/CODEE]@sU';
  5. $zamiana = "<div style=\"background: #EFEFFF; border: 1px solid #9797FF; padding: 5px 5px 5px 5px; box-shadow: 1px 1px 20px #CFCFFF;\">$1</div>";
  6. $text = preg_replace($wzorzec, $zamiana, $text);
  7. return $text;
  8. }
  9.  
  10. echo $plik1 = create_php(
  11. "
  12. <a href=\"index.php\">mmm</a>
  13. [CODEE]
  14. <a href=\"index.php\">mmm</a>
  15. [/CODEE]
  16. "
  17. );
  18. ?>
Sephirus
Żeby osiągnąć zamierzony efekt musisz niestety inaczej podejść do zagadnienia. Najpierw znajdź wszystkie "code'y":

  1. function create_php($text){
  2.  
  3. $wzorzec = '@\[CODEE](.*)\[/CODEE]@sU';
  4.  
  5. if(preg_match_all($wzorzec, $text,$znalezione))
  6. {
  7.  
  8. // Masz już w zmiennej $znalezione wszystkie znalezione kody - teraz zamiana
  9.  
  10. for($i = 0; $i < count($znalezione[0]); $i++)
  11. {
  12. $kodWewnetrzny = $znalezione[1][$i]; // przechowa to co jest pomiędzy [codee] a [/codee]
  13. $kod = $znalezione[0][$i]; // przechowa cały ciąg razem z [codee]...[/codee]
  14.  
  15. $kodWewnetrzny = '<div style="background: #EFEFFF; border: 1px solid #9797FF; padding: 5px 5px 5px 5px; box-shadow: 1px 1px 20px #CFCFFF;">'.htmlspecialchars($kodWewnetrzny).'</div>'; // zamiana poprzez htmlspecialchars i owinięcie w diva...
  16.  
  17. $text = str_replace($kod,$kodWewnetrzny,$text); // zamieniamy konkretne wystąpienie [codee]
  18. }
  19. }
  20.  
  21. return $text; // już mamy zamienione ;)
  22. }
  23.  
  24.  


HTH! wink.gif
mariusz g
Działa idealnie
Dziękuję
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.