匹配网页内容的网址的正则 本帖最后由 liujianliang 于 2011-08-03 16:18:03 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 还有你匹配的应该是<a href="">中的href吧,普通的文本http形式的匹配吗? 只要是把匹配的网址搜集出来就行href属性里面的 $html = <<<htmlskjdfksjdkf<a href="http://www.baidu.com" id="abc">sdfjk</a><a href="http://hi.baidu.com?info=aaa" id="abcdf">sdfjk</a>html;$r = '/<a[^href]*href="([^"]*)"/i';preg_match_all($r, $html, $a);echo '<pre>';print_r($a[1]);/*Array( [0] => http://www.baidu.com [1] => http://hi.baidu.com?info=aaa)*/ 用dom解析,比正则简单。下载及参考地址http://simplehtmldom.sourceforge.net/<?phprequire("simple_html_dom.php");$html = file_get_html('http://www.425sf.com/');foreach($html->find('a') as $element) echo $element->href . '<br>';?> 如果只保留http://格式的绝对路径,筛掉相对路径的该怎么写? $html = <<<htmlskjdfksjdkf<a href="http://www.baidu.com" id="abc">sdfjk</a><a href="http://hi.baidu.com?info=aaa" id="abcdf">sdfjk</a><a href="/a.php" id="abcdf">sdfjk</a><a href="https://hi.baidu.com?info=aaa" id="abcdf">sdfjk</a><a href="ftp://hi.baidu.com?info=aaa" id="abcdf">sdfjk</a>html;$r = '/<a[^href]*href="((http|https|ftp):\/\/[^"]*)"/i';//(http|https|ftp)这块你也可以增加其他的类型preg_match_all($r, $html, $a);echo '<pre>';print_r($a[1]); 上面没说清楚,有些域名后面带2.htm字符的,如http://www.0387.com/4.htm,只要把域名采集出来 lz正则只需要在上面加入一个正则模式匹配符号,去掉^ 和 $(因为匹配内容不是严格的必须从头到尾都匹配)$patten = "((https|http|ftp|rtsp|mms)?://)?(([0-9a-z_!~*'().&=+$%-]+:)?[0-9a-z_!~*'().&=+$%-]+@)?(([0-9]{1,3}\.){3}[0-9]{1,3}|([0-9a-z_!~*'()-]+\.)*([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\.[a-z]{2,6})(:[0-9]{1,4})?((/?)|(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)";preg_match_all('/'.str_replace('/','\\/', $patten) . '/i', $content, $matches);kyzy_yy_pm 的解决方案很好,我只是告诉网上的正则拿来在php中应该怎么用 $r = '/<a[^href]*href="((http|https|ftp):\/\/[^\/]+).*"/i';//(http|https|ftp)这块你也可以增加其他的类型 $html = <<<htmlskjdfksjdkf<a href="http://www.baidu.com" id="abc">sdfjk</a><a href="http://hi.baidu.com?info=aaa" id="abcdf">sdfjk</a><a href="/a.php" id="abcdf">sdfjk</a><a href="https://hi.baidu.com?info=aaa" id="abcdf">sdfjk</a><a href="ftp://hi.baidu.com?info=aaa" id="abcdf">sdfjk</a>html;$r = '/<a[^href]*href="((http|https|ftp):\/\/[^\/|\?|"]*)[^"]*"/i';preg_match_all($r, $html, $a);echo '<pre>';print_r($a[1]);/*Array( [0] => http://www.baidu.com [1] => http://hi.baidu.com [2] => https://hi.baidu.com [3] => ftp://hi.baidu.com)*/ 哦哦,但我试了不行,我详细看了这个需求才看明白是采集域名的$url = "http://baidu.a98q.com/";$html = file_get_contents($url);$r = '/<a[^href]*href="((http|https|ftp):\/\/[^\/]+).*"/i';//(http|https|ftp)这块你也可以增加其他的类型preg_match_all($r, $html, $a);var_dump($a); 为什么html来源网址http://baidu.a98q.com/匹配不了呢? 那是因为它的页面中href属性没有双引号$r = '/<a[^href]*href="?((http|https|ftp):\/\/[^\/|\?|"| ]*)[^"]*"?/i'; 你是指的重复吗?你用array_unique整理下就行了 如果不要端口的话:$r = '/<a[^href]*href="?((http|https|ftp):\/\/[\w|\.]*)[^"]*"?/i'; 哈哈,现在找这个,可惜不知道看谁的。是不是用7楼的:$html = <<<htmlskjdfksjdkf<a href="http://www.baidu.com" id="abc">sdfjk</a><a href="http://www.ku8sf.com?info=aaa" id="abcdf">sdfjk</a>html;$r = '/<a[^href]*href="([^"]*)"/i';preg_match_all($r, $html, $a);echo '<pre>';print_r($a[1]);/*Array( [0] => http://www.baidu.com [1] => http://hi.baidu.com?info=aaa)*/ Array( [0] => http://www.52xoyo.cn [1] => http://hi.baidu.com?info=aaa)*/ 请问,如何写PHP加密算法 请教一个类实例化的疑难问题 有关SupeSite6.0调用数据库问题 奇特的session现象,你见过吗?? PHP如何获取web上下文路径? 关于表单提交的疑问 请教一个很奇怪的smary问题 哪位兄台给我一个正则表达式,用来表示图片,自己写了一个,好像不大对 小弟做的聊天室,上传后就不好使了!!谁给看看啊??? JavaScript小作业求助大佬 求 php 设置session不过期 不在php.ini里设置 导航栏弹出菜单问题
skjdfksjdkf<a href="http://www.baidu.com" id="abc">sdfjk</a>
<a href="http://hi.baidu.com?info=aaa" id="abcdf">sdfjk</a>
html;$r = '/<a[^href]*href="([^"]*)"/i';preg_match_all($r, $html, $a);
echo '<pre>';print_r($a[1]);/*Array
(
[0] => http://www.baidu.com
[1] => http://hi.baidu.com?info=aaa
)*/
http://simplehtmldom.sourceforge.net/<?php
require("simple_html_dom.php");
$html = file_get_html('http://www.425sf.com/');
foreach($html->find('a') as $element)
echo $element->href . '<br>';
?>
skjdfksjdkf<a href="http://www.baidu.com" id="abc">sdfjk</a>
<a href="http://hi.baidu.com?info=aaa" id="abcdf">sdfjk</a>
<a href="/a.php" id="abcdf">sdfjk</a>
<a href="https://hi.baidu.com?info=aaa" id="abcdf">sdfjk</a>
<a href="ftp://hi.baidu.com?info=aaa" id="abcdf">sdfjk</a>
html;$r = '/<a[^href]*href="((http|https|ftp):\/\/[^"]*)"/i';//(http|https|ftp)这块你也可以增加其他的类型preg_match_all($r, $html, $a);
echo '<pre>';print_r($a[1]);
$patten = "((https|http|ftp|rtsp|mms)?://)?(([0-9a-z_!~*'().&=+$%-]+:)?[0-9a-z_!~*'().&=+$%-]+@)?(([0-9]{1,3}\.){3}[0-9]{1,3}|([0-9a-z_!~*'()-]+\.)*([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]\.[a-z]{2,6})(:[0-9]{1,4})?((/?)|(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)";
preg_match_all('/'.str_replace('/','\\/', $patten) . '/i', $content, $matches);
kyzy_yy_pm 的解决方案很好,我只是告诉网上的正则拿来在php中应该怎么用
skjdfksjdkf<a href="http://www.baidu.com" id="abc">sdfjk</a>
<a href="http://hi.baidu.com?info=aaa" id="abcdf">sdfjk</a>
<a href="/a.php" id="abcdf">sdfjk</a>
<a href="https://hi.baidu.com?info=aaa" id="abcdf">sdfjk</a>
<a href="ftp://hi.baidu.com?info=aaa" id="abcdf">sdfjk</a>
html;$r = '/<a[^href]*href="((http|https|ftp):\/\/[^\/|\?|"]*)[^"]*"/i';preg_match_all($r, $html, $a);
echo '<pre>';print_r($a[1]);/*Array
(
[0] => http://www.baidu.com
[1] => http://hi.baidu.com
[2] => https://hi.baidu.com
[3] => ftp://hi.baidu.com
)*/
哦哦,但我试了不行,我详细看了这个需求才看明白是采集域名的$url = "http://baidu.a98q.com/";
$html = file_get_contents($url);
$r = '/<a[^href]*href="((http|https|ftp):\/\/[^\/]+).*"/i';//(http|https|ftp)这块你也可以增加其他的类型
preg_match_all($r, $html, $a);
var_dump($a);
$r = '/<a[^href]*href="?((http|https|ftp):\/\/[^\/|\?|"| ]*)[^"]*"?/i';
$html = <<<html
skjdfksjdkf<a href="http://www.baidu.com" id="abc">sdfjk</a>
<a href="http://www.ku8sf.com?info=aaa" id="abcdf">sdfjk</a>
html;$r = '/<a[^href]*href="([^"]*)"/i';preg_match_all($r, $html, $a);
echo '<pre>';print_r($a[1]);/*Array
(
[0] => http://www.baidu.com
[1] => http://hi.baidu.com?info=aaa
)*/
(
[0] => http://www.52xoyo.cn
[1] => http://hi.baidu.com?info=aaa
)*/