Per trovare tutti i valori numerici prova questa.
codice:
$stringa = 'testo [img=12143] testo testo [img=2345] testo [img=1001]';
preg_match_all("/\[img=(.*?)\]/",$stringa,$mth);
echo "<pre>";
var_dump($mth[1]);
echo "</pre>";
edit. Per fare tutte le sostituzioni non saprei. E' da poco che sbatto la testa su queste cose. 
riedit. Forse ci son riuscito.
codice:
$stringa = 'testo [img=12143] testo testo [img=2345] testo [img=1001]';
$stringa = preg_replace('[img=(.*?)]','numero/'.'\\1',$stringa);
echo $stringa;
mmm.ho cantato vittoria troppo presto.