Cevap için çok teşekkür ederim.
Aşağıdaki gibi değiştirdim kodları:
$desen = preg_match_all('#\[yazar\](.*?)\[\/yazar\]#si', $m_icerik, $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 y_adi = '$yazar'"));
$yazarID = $yazarbul['y_id'];

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

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

echo $degistir;

}


Şimdilik yazdırıp bakıyorum sonuca, çıktı istediğim gibi değil. Mesela [yazar]Namık Kemal[/yazar] falanı yazdı. [yazar]Şinasi[/yazar] şöyle dedi.
gibi bir veriyi üç kez yazıyor ve önce Namık Kemal' i linkliyor, sonra Şinasi' yi; ama üçüncü yazımda ikisini de linklemiyor. :/