Por defecto los cuantificadores "intentan" coincidir con todo lo que puedan. Esto se conoce como
greedy match o comportamiento
ambicioso.
Por eso el patrón coincide como lo hace.
Tenés dos soluciones posibles:
1.-
Código PHP:
$texto=ereg_replace ("\[1\]([^\[]*)\[/1\]", " ", $texto);
Esto te vale si sabés que nunca habrá un [ en la cadena que querés eliminar.
2.-
Código PHP:
$texto=preg_replace ("#\[1\](.*?)\[/1\]#", " ", $texto);
El modificador ? junto a un cuantificador indica que ese cuantificador debe coincidir con la menor cadena posible. Pero como no es soportado en las funciones ereg*, hay que usar las funciones de perl (preg*).
Saludos.