首先,完全正确的匹配是不可能的。其实可以这样做
<?php
$str="a http://wa hsssk ftp://sdff fsfsf http://bb";
preg_match_all("'(http://|ftp://|mms://|file:///)[^\s]+'is",$str,$m);
print_r($m[0]);
?>