Gelen bağlantıların yapısı ne şekilde bilmiyorum örneğin "/sayfa1, /sayfa2, /sayfa3..." gibiyse for döngüsü içerisinde bir şart oluşturman gerekir.
if (!strstr($sonuc[1][$i], "YASAKLANACAK_ID")) : // eğer yasaklanan id değer içerisinde yoksa çalışacak kod
endif;


Sizin örneğinize göre şu şekilde kullanılabilir:
preg_match_all('@href="(.*?)"@si',$veri,$sonuc);

for ($i = 0; $i < count($sonuc[1]); $i++) {

if (!strstr($sonuc[1][$i], "2")) {

echo $sonuc[1][$i]."
";

$dosya = fopen("linkler.txt","a");
fwrite($dosya,$sonuc[1][$i]."\n");
fclose($dosya); }

}


Bu örnekte kontrol edilecek id değerine 2 yazdım. Yani /sayfa2 değerini atladık sadece /sayfa1 ve /sayfa3 alındı. Daha farklı kullanımları da mevcut, toplu kontroller için in_Array fonkisyonunu araştırabilirsiniz.