con le espressioni regolari (preg_replace invece di str_replace) puoi fare in modo di scrivere qualcosa tipo

cerca @1 e dopo un carattere NON numerico. in questo modo @15 salta la verifica e passa al @15 definito dopo.
solo che non me ne intendo di replace multiple quindi non ti so dire di più.