Hi yildi,
$ids[] = preg_replace('%www.url.de?ID=([0-9])%', '\1', $line);
preg_replace() halte ich hier für einen falschen Ansatz - du willst ja eigentlich nichts ersetzen (dein Gedanke war durch das Ersetzen alles HTML wegzubekommen, aber das ist von-hinterum-durch-die-Brust-ins-Auge ;-).
Versuche stattdessen mit preg_match_all() alle Links/URLs einzulesen - könnte z.B. so aussehen:
$anz_urls = preg_match_all('%(href|src)="([^"]+)"%', $text, $treffer);
Zum Einlesen des Textes würde ich dann nicht file() empfehlen, sondern file_get_contents(), was den kompletten Text in eine Variable liest und das nicht in ein Array aufsplittet.
Schau dir dann einfach mal mit print_r($treffer) an, wie die Struktur des $treffer-Arrays aussieht (mag etwas gewöhnungsbedürftig sein) - du kannst das Unterarray von $treffer was die URLs enthält (ich glaube es müsste $treffer[2] sein) dann mit foreach durchgehen.
MfG, Dennis.