php正则表达式获取内容所有链接
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属性,并遍历匹配结果。根据链接的路径类型(相对路径、站点根目录或当前目录),输出相应的链接。最后关闭文件指针。通过这种方式,你可以轻松地获取并处理网页中的所有链接。
以上所述就是本文的全部内容。希望这些方法能够帮助到你。如果你有任何疑问或建议,请随时与我们分享。
编程语言
- php正则表达式获取内容所有链接
- java big5到gb2312的编码转换
- PHP $_FILES中error返回值详解
- 在VScode中创建你的代码模板的方法
- ASP.NET Core中实现用户登录验证的最低配置示例代
- js使用DOM操作实现简单留言板的方法
- js弹出窗口简单实现代码
- 快速解决js动态改变dom元素属性后页面及时渲染的
- javascript 中事件冒泡和事件捕获机制的详解
- Yii配置文件用法详解
- vue+element实现表单校验功能
- 解决vue-router进行build无法正常显示路由页面的问
- jQuery Easyui 下拉树组件combotree
- JavaScript地理位置信息API
- php图片加水印原理(超简单的实例代码)
- 基于Vue2的独立构建与运行时构建的差别(详解)