$yazi = $_POST['yazi'];
$desen = preg_match_all('#[yazar](.*?)[/yazar]#si', $yazi, $veri);
for($i = 0; $i <= count($veri[1]); $i++)
{
$yazar = $veri[1][$i]; // yazarımınızın adı

// veritabanında yazarı arıyoruz

$yazarbul = mysql_fetch_assoc(mysql_query("SELECT * FROM yazarlar WHERE yazaradi = '$yazar'"));
$yazarID = $yazarbul['yazarid'];

// bulduğumuz veriyi değiştireceğiz.

$degistir = str_replace('[yazar]'.$yazar.'[/yazar]', "[yazar]$yazar[/yazar]", $yazi);

// veritabanına kayıt ediyoruz

$ekle = mysql_query("INSERT INTO yazi (baslik, icerik) VALUES ('$baslik', '$degistir')");
}


Kodu denemedim, hatalar varsa üzerinden geliştirebilirsin. Çalışacağını düşünüyorum :)

Ek Olarak: Yalnız benim verdiğim kod for döngüsünde insert sorgusu olduğundan dolayı her seferinde yeni kayıt oluşturacaktır. Yazıyı içeriği boş halde ekleyip tablodaki icerik kısmını update edersen istediğin şekle girecektir. Yapamazsan yardımcı olabilirim.