Ich arbeite immer mit den preg*-Funktionen; die sind nur wenig langsamer als ereg* und bieten komplette Perl-kompatible Regexps. Das Beispiel mit PCRE:
PHP-Code:
// Ein Match, dem ein ? folgt, ist faul - er matcht so wenig Text wie möglich
$Y "Test::[X]::TEST::[X]::";
$Y preg_replace ("/\:\:\[(.*?)\]\:\:/i""A"$Y);
echo 
$Y;

// Alternative: Der Modifikator U macht alle Matches faul
$Y "Test::[X]::TEST::[X]::";
$Y preg_replace ("/\:\:\[(.*)\]\:\:/iU""A"$Y);
echo 
$Y