Allora, il problema mi sembra essere nell'espressione regolare... quando tu metti (.*) lui va tranquillamente avanti a considerare caratteri e si mangia anche la chiusura del tag immagine..
Codice PHP:
$pattern "/([img])([^\[/img]]*></img>/i"
Spiegami pero' meglio che tipo di stringhe vuoi fare il matching, cioè ad esempio:
tutte le immagini hanno id='immagine' oppure 'immagine' indica un nome qualunque, non so, fammi degli esempi, le espressioni regolari sono baxxarde da costruire