$matches[2]这个数组里就是你提取的链接.
$matches[0]提取的是符合<a href='xxx'>asdfasd</a>这样的串,
这是preg_match_all这个函数的特点.
$matches[0]提取的是符合<a href='xxx'>asdfasd</a>这样的串,
这是preg_match_all这个函数的特点.
解决方案 »
- 数组结构调整求助
- 谁给我讲讲MVC?
- php的session在有www和没有www之间的切换问题
- 求正则 匹配【www.aa.com/index.php/news/read/1353/新闻标题】 如何写正则?
- php隐藏字符集的问题,高手指教!
- 有无patch好的gd2 gif for win或者帮偶patch一下?
- 请教PHP中实现联动的代码。
- 招聘php程序员
- 请问用smtp发送邮件,怎么做才能使收邮件的人能看到html格式。
- 上传组件的php断点调试问题
- 菜鸟求教---php文档里如何读回javascript确认框的返回值?
- 请问这个是系统定义的吗 $_GET["currentdir"]
如果<a href='#'>asdfasd </a>这样的串也给提取出来,我要排除这一种
还有<a href='javascript:viod(0)'>asdfasd </a>像这种javascript的也排除呀
$pat="/<\s*a\s.*?href\s*=\s*[\"\']*([^\s\>#\'\"\)\(]+)[\"\']*>(.*?)\<\/a\>/is";你的正则过于滥用.*?了,我给你精简一下.
(
[0] => Array
(
[0] => <A href="http://www.aa.com">aa</A>
[1] => <A href="http://www.aa.com">aa</A>
[2] => <A
href="http://www.google.com/coop/cse?cx=017961863061223484325:by0hzdu5kl0"
target=_blank>搜索</A>
<LI><A href="#" target=_blank>论坛社区</A>
像这样的就认不出来了
[26] => <A href="move1-92.html" target="_blank"><IMG alt="刘心武揭秘红楼梦_秦可卿被告发之谜" src="http://www.11173.cn/Uploadpic/ALLIMG/200752521481638366.jpg" width="100" height="100"></A> <!--100*100 -->
<H3><A href="move1-92.html" target="_blank">刘心武揭秘红楼梦_秦可卿被告发之谜</A></H3>
<P><SPAN class=movie_date>发布时间:2008-09-14</SPAN><BR><SPAN
class=movie_category>分类:<A
href="list1-4-1.html">幽默搞笑</A> [27] =>
这个也认不出来
$pat="/<\s*a\s.*?href\s*=\s*[\"\']*([^\s\>#\'\"\)\(]+)[\"\']*[^\>\<]*>(.*?)\<\/a\>/is";万变不离其踪,只要知道原理就很容易做了.
你这个不是要匹配一下,可能加target="_blank"的这种情况吗,加上[^\>\<]*就好了,同理,如果在href加上有,也可以加个[^\>\<]*这样的,
我只能说的是,不要烂用非贪婪写法(.*?),
一是会影响效率,
二是避免出现匹配不正常的情况.
正则很难看懂,看了几个晚上,都没怎么了解
echo '<pre>';
function get_url($str){
//$pat='/<a(.*?)href=\'(.*?)\'(.*?)>(.*?)<\/a>/i';
$pat="'<\s*a\s.*?href\s*=\s*([\"\'])?(?(1)(?!\#|javascript)(.*?)\\1|([^\s\>]+))[^>]*>?(.*?)</a>'isx";
///:/http:\/\/[a-zA-Z0-9][a-zA-Z0-9\/._-]+[\.html]/;
preg_match_all($pat,$str,$matches);
return $matches;
}
$stream="sdkkk<center><a href=dffd/aa.php?diih=23>sdfsdfffdd</a></center><a href='http://www.dfkdf.com/sdfkjsdf.asp?id=334'>dfkds</a><a href=\"dffd/aa.php?diih=3\">3222</a><a href='dffd/aa.html'>3222</a><a href='#'>3222</a><a href='javascript:void(0)'>3222</a>";
//echo($stream);
$matches=get_url($stream);
print_r($matches);
echo '</pre>';
我发现这个比我原来的好多了
只要排除target=_black就可以了
$pat="/<\s*a\s.*?href\s*=\s*[\"\']*([^\s\>#\'\"\)\(]+)[\"\']*[^\>\<]*>(.*?)\<\/a\>/is";