php正则表达式获取内容所有链接

网络编程 2025-03-24 22:54www.168986.cn编程入门

PHP正则表达式:挖掘内容中的所有链接

在Web开发和数据抓取的过程中,获取内容中的所有链接是一项常见且重要的任务。PHP正则表达式能够帮助我们轻松实现这一目标。本文将介绍两种使用PHP正则表达式获取内容所有链接的方法。

方法一:使用简洁的正则表达式匹配

```php

function get_all_url($code){

// 使用正则表达式匹配所有链接

preg_match_all('/"\' ]+)["|\']?[^>]+>([^<]+)<\/a>/i', $code, $arr);

// 返回包含链接名称和URL的数组

return array('name' => $arr[2], 'url' => $arr[1]);

}

```

这个方法通过定义一个函数`get_all_url`来提取HTML代码中的链接。正则表达式模式`/"\' ]+)["|\']?[^>]+>([^<]+)<\/a>/i`用于匹配链接,并将结果存储在数组`$arr`中。函数返回一个包含链接名称和URL的关联数组。

方法二:详细URL并处理不同路径

```php

// 假设$url是你要处理的网页地址

$site = substr($url, 0, strpos($url, "/", 8)); // 提取站点

$base = substr($url, 0, strrpos($url, "/") + 1); // 提取文件所在目录

$fp = fopen($url, "r"); // 打开URL

while (!feof($fp)) {

$contents .= fread($fp, 1024); // 读取URL内容

}

$pattern = "|href=['\"]?([^ '\"]+)['\" ]|u";

preg_match_all($pattern, $contents, $regarr, PREG_SET_ORDER); // 匹配所有href属性

for ($i = 0; $i < count($regarr); $i++) { // 遍历所有匹配结果

if (!eregi("://", $regarr[$i][1])) { // 判断是否为相对路径

if (substr($regarr[$i][1], 0, 1) == "/") { // 判断是否为站点的根目录

echo "link" . ($i + 1) . ":" . $site . $regarr[$i][1] . "
"; // 输出根目录链接

} else {

echo "link" . ($i + 1) . ":" . $base . $regarr[$i][1] . "
"; // 输出当前目录链接

}

} else {

echo "link" . ($i + 1) . ":" . $regarr[$i][1] . "
"; // 输出相对路径链接

}

}

fclose($fp);

```

这段代码首先通过`substr`函数提取站点和文件所在目录。然后,使用正则表达式匹配所有href属性,并遍历匹配结果。根据链接的路径类型(相对路径、站点根目录或当前目录),输出相应的链接。最后关闭文件指针。通过这种方式,你可以轻松地获取并处理网页中的所有链接。

以上所述就是本文的全部内容。希望这些方法能够帮助到你。如果你有任何疑问或建议,请随时与我们分享。

上一篇:java big5到gb2312的编码转换 下一篇:没有了

Copyright © 2016-2025 www.168986.cn 狼蚁网络 版权所有 Power by