php获取页面所有链接的正则表达式
php获取页面所有链接的正则表达式
$pattern = '/<a(?:.*?)href="(((?:http(?:s?):\/\/)?([^\"\/]+))?(?:[^\"]*))"(?:[^>]*?)>([^<]*?)<\/a>/i'; preg_match_all($pattern, $data, $links);
$links[0]是所有<a>标签。
$links[1]是所有href。
$links[2]是所有带http(s)://链接。
$links[3]是所有域名,如:www.cnblogs.com。
$links[4]是所有a标签内容。
直接获取<a>标签:$pattern = '/<a.*?<\/a>/i';
仅获取href数据:$pattern = '/<a(?:.*?)href=[\'"]([^\"\']*)[\'"][^<]*?<\/a>/i'; //仅href
单双引号,href前换行,href后等号前后夹杂空格,a标签内嵌标签等一堆情况解决方案:
$pattern = '/<a(?:[\s\S]*?)href\s*?=\s*?[\'"](((?:http(?:s?):\/\/)?([^\"\'\/]+))?(?:[^\"\']*))[\'"](?:[^>]*?)>([\s\S]*?)<\/a>/i';
演示网址:phpParseLinks
修改:上面pattern中新增?,红色标记。修复无http://与域名情况。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步