如何使用正则表达式获取URL然后从网站回显URL?

时间:2013-11-05 02:17:56

标签: php regex url echo

为了好玩,我正在尝试编写可以扫描网站上的YouTube网址并保存的内容。 URL不在标签内,因此我需要使用正则表达式。我把那部分放下了。但是我如何回应数组中的URL?

到目前为止我所拥有的:

<?php

$website = file_get_contents('http://boards.4chan.org/mu/res/41283979');
$reg_exURL = "/(?:https?://)?(?:www\.)?youtu(?:be\.com/watch\?(?:.*?&(?:amp;)?)?v=|\.be/)([\w‌​\-]+)(?:&(?:amp;)?[\w\?=]*)?/";

if(preg_match($reg_exURL, $website, $urls)) {
    // Echo all values in the array
    foreach ($urls as $url) {
        echo $url;
    }
} else {
    echo "No URLs Found.";
}

?>

但是当我回复$ url时,我只得到“Array”这个词。我希望看到所有的网址,最好是每行一个。

4 个答案:

答案 0 :(得分:1)

注意4chan如何在youtube ID中添加<wbr>标记,可能是对此类内容的安全措施。您必须首先使用替换从源中删除这些标记。

然后您可以使用正则表达式来匹配源中的所有链接,请记住,YouTube视频ID由字母,数字,_, - 组成,并且总是长度为11个字符。

$website = str_replace("<wbr>","",file_get_contents('http://boards.4chan.org/mu/res/41283979'));

$regex = "/(https?:\/\/)?(?:www\.)?youtube\.com\/watch\?v=[A-Za-z0-9_-]{11}/";
preg_match_all($regex , $website, $urls, PREG_SET_ORDER); 

foreach ($urls as $url)
    echo $url[0] . "<br>";

答案 1 :(得分:0)

print_r用于输出数组:

http://php.net/manual/en/function.print-r.php

答案 2 :(得分:0)

您可以使用print_r($url)var_dump($url)。这些是打印数组的标准方法。

答案 3 :(得分:0)

您可以使用foreach循环执行此操作。

<?php

$website = file_get_contents('http://boards.4chan.org/mu/res/41283979');
$reg_exURL = "/(?:https?:\/\/)?(?:www\.)?youtu(?:be\.com\/watch\?(?:.*?&(?:amp;)?)?v=|\.be\/)([\w‌​\-]+)(?:&(?:amp;)?[\w\?=]*)?/";
if(preg_match($reg_exURL, $website, $urls)) {
    // Echo all values in the array
    foreach ($urls as $url) {
        echo $url;
    }
} else {
    echo "No URLs Found.";
}

?>