Выделение соответствия регулярными выражениями и PHP

все еще борется с регулярным выражением:) У меня есть этот код:

$link = '/\bhttp:\/\/.+\..+[\/\w]?\b/i';
$match = array();
if (preg_match($link, 'http://bit.ly/hghjK6 bla bla',&$match))
{
    echo 'match'.'</br>';
    print_r($match);
}

поскольку я пытаюсь извлечь только URL из строки, которую я не могу изолировать, и значение, вставленное в $match, всегда содержит "bla bla", которое следует за URL-адресом в моей строке что такое регулярное выражение, необходимое только для соответствия URL-адресу, и ничего больше не происходит? Благодаря

Ответ 1

$r = '`(\s|\A)(http|https|ftp|ftps)://(.*?)(\s|\n|[,.?!](\s|\n)|$)`ism'; // regex to match a URL

$i = preg_match_all($r, $str, $m, PREG_SET_ORDER);
if($i){
  foreach($m as $set){
    // each $set in $m is a group of match
    // complete URL is
    echo $set[2].'://'.$set[3];
  } 
}

это соответствует всем URL-адресам в тексте.