con preg_match() compruebas si existe el patron, en este caso target="foo"
con preg_replace() realizas el cambio, solo si no existe el target.. cierto???
Código PHP:
$texto = "letras y mas letras <a href='http://todo-mods.com'>todomods</a>";
if (!preg_match('/target=([\'\"])?[^\\1]+(\\1)*/i', $texto))
{
$texto = preg_replace('/<a([^>]*)>/i', '<a\\1 target="bar">', $texto);
}
ya....!!! esta comprobada la expresion...