Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyrażenia regularne - zamiana <br> na \n tylko w specjalnych fragmentach
Forum PHP.pl > Forum > PHP
Michael2318
Załózmy mam taki string:

  1. $zmienna = 'ala ma kota
  2. kot ma ale
  3. [code=cos]to jest kod
  4. tutaj br nie moze
  5. sie znajdowac[/code]
  6. to jest dalszy tekst';


Po 'obróbce', ten kod powinien wyglądać tak:

  1. $zmienna = 'ala ma kota<br>kot ma ale<br>[code=cos]to jest kod
  2. tutaj br nie moze
  3. sie znajdowac[/code]<br>to jest dalszy tekst';


Podsumowując, zamiana \n na <br> wszędzie, oprócz tekstów w tagach [code=*]text[/code].

Mam takie coś:

  1. $string = str_replace(array("\n"), array("\n<br />\n"), $string);
  2. $string = preg_replace("#\[code=([a-zA-Z]+)\](.*?)\[\/code\]#si", (str_replace("\n<br />\n", "\n", '[code=\\1]\\2[/code]')), $string);


najpierw zamieniam wszystkie \n na <br>, a potem niby 'pozbywam' się tego <br> ze środka tagów [code=*][/code]. Niby dlatego, że się nie pozbywam bo to nie działa... Ktoś mnie oświeci, nakieruje?
netmare
Popróbuj najpierw zamienić coś jak /^((?<!\[code).*)$/ na \1<br/> a potem wytnij \r\n. Sorry ale nie mam gdzie sprawdzić teraz czy działa.

Edit: Trochę popłynąłem z tym look-behind. Może zastosuj preg_replace_callback zamiast preg_replace i ten str_replace daj w callbacku to będzie okej.
Michael2318
Niestety nie:

Warning: preg_replace_callback() [function.preg-replace-callback]: Requires argument 2, '[code=\1]\2[/code]', to be a valid callback

  1. $string = str_replace("\n", "\n<br />\n", $string);
  2. $string = preg_replace_callback("#\[code=([a-zA-Z]+)\](.*?)\[\/code\]#si", str_replace("\n<br />\n", "\n", "[code=\\1]\\2[/code]"), $string);
  3. echo $string;
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.