вот работающий код:
Код:
$pres = array(); $i = 0;
$text = preg_replace('{(<pre[^>]*?>.*</pre>)}Uesi','"UnrealPRE$i".(($pres[$i++]="$1")?"":"")', $text);
$text = preg_replace("'([\r\n])[\s]+'"," ",$text);
$done = false;
while (!$done)
{ $ch1 = strlen($text);
$text = str_replace(" "," ",$text);
$ch2 = strlen($text);
if ($ch1==$ch2) {$done=true;} else {$done=false;}
}
$text = preg_replace('/UnrealPRE(\d+)/e', '$pres[$1]', $text);
единственный его баг (который выявлен на даный момент) - он вырезает слова содеержащие знак $ и сам знак отдельно.