从字符串中提取网址[复制]

This question already has an answer here:

I have this string:

http://sh.st/st/8052f1bbc624add41cd2a6236f76cfc8/https://www.rapidvideo.com/embed/o1cTaZbux

And I want to extract urls separate from this.

My code:

$pattern = '@((https?://)?([-\\w]+\\.[-\\w\\.]+)+\\w(:\\d+)?(/([-\\w/_\\.]*(\\?\\S+)?)?)*)@';

$str= "http://sh.st/st/8052f1bbc624add41cd2a6236f76cfc8/https://www.rapidvideo.com/embed/o1cTaZbux";

if($num_found = preg_match_all($pattern, $str, $out))
{
  echo "FOUND ".$num_found." LINKS:
";
  print_r($out[0]);
}

But the output is wrong:

Array
(
    [0] => http://sh.st/st/8052f1bbc624add41cd2a6236f76cfc8/https
    [1] => www.rapidvideo.com/embed/o1cTaZbux
)

I want to output:

Array
(
    [0] => http://sh.st/st/8052f1bbc624add41cd2a6236f76cfc8
    [1] => https://www.rapidvideo.com/embed/o1cTaZbux
)

Please help

</div>

Maybe don't have fun with statements etc. and do it by function preg_split?

Eg. $urls = preg_split('/ (http|https) /', $str, PREG_SPLIT_DELIM_CAPTURE);

EDIT

To do this you must add new flag + add results to each other.

$urls = preg_split('/(http|https)/', $str, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);

foreach ($urls as $k => $v) {
    if ($k % 2 != 0) {
        continue;
    }
    $list[] = $urls[$k].$urls[$k+1];
}

$str= "http://sh.st/st/8052f1bbc624add41cd2a6236f76cfc8/https://www.rapidvideo.com/embed/o1cTaZbux";


$foo = preg_split('#(http://)|(https://)#', $str,0,PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);



for ($i = 0; $i < sizeof($foo); $i += 2) {
    $delim = isset($foo[$i + 1]) ? $foo[$i + 1] : '';
    $tmp[] = $foo[$i] . $delim;
}
print_r($tmp);

Array (
[0] => http://sh.st/st/8052f1bbc624add41cd2a6236f76cfc8/
[1] => https://www.rapidvideo.com/embed/o1cTaZbux
)