Ja sam zeznuo par stvari, a ti ih posle nisi dobro popravio. Evo ovaj kod radi:
PHP kôd:
<?php
$input = '
ovo
je
tekst
abc
<pre>
var
x: Integer;
begin
x := 10;
end;
</pre>
';
define('ZAMENA_ZA_NL', '~\n~'); // ovde naravno moze da se stavi i npr. {{n}} ili vec nesto sto tebi odgovara
// sakrijes \n unutar <PRE>...</PRE> dela
$out = preg_replace_callback('|<pre>.+?</pre>|si',
create_function('$matches', 'return str_replace("\n", ZAMENA_ZA_NL, $matches[0]);'),
$input);
//zamenis \n sa <br>
$out = nl2br($out);
// vratis \n
$out = str_replace(ZAMENA_ZA_NL, "\n", $out);
echo $out;
?>
Ako ovo pokreces na windowsu onda tamo gde pise "\n" moras da zamenis da bude "\r\n" (windows new line)
EDIT: Ako hoces da ovo isto uradis za [code] blok onda ti je regExp ovakav:
'|\[code\].+?\[/code\]|si'