Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wyrażenia regularne - zamiana <br> na \n tylko w specjalnych fragmentach
Michael2318
post 14.02.2013, 13:08:23
Post #1





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
netmare
post 14.02.2013, 17:41:34
Post #2





Grupa: Zarejestrowani
Postów: 285
Pomógł: 37
Dołączył: 18.12.2007
Skąd: Łódź

Ostrzeżenie: (0%)
-----


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.

Ten post edytował netmare 14.02.2013, 18:50:21
Go to the top of the page
+Quote Post
Michael2318
post 14.02.2013, 19:24:53
Post #3





Grupa: Zarejestrowani
Postów: 651
Pomógł: 116
Dołączył: 3.06.2012
Skąd: Lędziny

Ostrzeżenie: (0%)
-----


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;
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 24.06.2025 - 00:45