Je pense pas que l'ordre des eregi_replace influe sur quelque chose (au passage, je ne vois pas l'intérêt du premier, puisque la fonction nl2br supprime tous les \n ...)
Pour le eregi_replace, essaye peut-être comme ça :
while (eregi("\[url=([[:alnum:]]+)://([^<[

pace:]]*)([[:alnum:]#?/&=])\](.+)\[\/url\]", $news_main)) {
$news_main = eregi_replace("\[url=([[:alnum:]]+)://([^<[

pace:]]*)([[:alnum:]#?/&=])\](.+)\[\/url\]", "<a href=\"\\1://\\2\\3\" target=\"_blank\">\\4</a>", $news_main);
}