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
)