regex ten pek anlamam ama bu açığımı kapatmak için elimden geleni yapıyorum.

\b([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}\b
Array da bıraktım, sanırım döngüyü kendiniz yazabilirsiniz.

preg_match_all('/\b([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}\b/im', $yazi, $sonuc, PREG_PATTERN_ORDER);
var_dump($sonuc);
Burda da değişik linkler üzerinde test ettim, tırnaklar ile filan oynadım




Ama dandik oldu, yazı içindekileri de alıyor, önce tüm anchor html etiketlerini almak daha yararlı olabilir.

dene.me
..