$site = '(?:www.yourfilehost.com)';
$ext = '(?:zip)'

while($data~ m/((mms|h?ttp):\/\/(?:[\w\/\.\?\=\-\&\:]*($site)?(\/)?([\w\/\.\?\-\=\&\:]*|[\w\/\.\?\=\-\&\:]*\.$ext[\w\/\.\?\=\-\:]*)))/g) {
$output = $1;
}

だと $dataに入っている ttpから始まるどのようなアドレスでも抽出して$1に入れてしまいます。

そうではなく

mms://アドレス;ポート番号 ←や
http://アドレス;ポート番号 ←や
ttp://アドレス;ポート番号 ←や
$siteに含まれてるサイト先 や
$extに含まれてる拡張子が あるときだけ $outputには入れられないですか?