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://与域名情况。