喜悦国际村 
» 游客:  注册 | 登录 | 搜索 | 统计 | 帮助

RSS 订阅当前论坛  

喜悦证交所已经关闭

上一主题 下一主题
     
标题: [问题] 求一正则表达式  
 
zotong2006
新手上路
Rank: 1



UID 127435
精华 0
积分 33
帖子 19
金钱 33 喜悦币
威望 0
人脉 0
阅读权限 10
注册 2008-6-9
状态 离线
求一正则表达式

用户提交url以后,我想通过正则表达式来匹配一个网站中的友情链接,通过匹配<a></a>中的内容,其中包含http:// 并且http://后面部分不包括提交的url(如果与提交的url相同则视为内部链接)然后再匹配出</a>之前的文字,就可以得到友情链接的网址和文字了,但操作过程中,遇到下面几种情况

例如:
1. <a href=http://www.sina.com target=_blank>新浪 </a>              没有引号
2. <a href='http://www.sina.com' target='_blank'>新浪 </a>          单引号
3. <a href="http://www.sina.com" target="_blank">新浪 </a>          双引号
4. <a href="http://www.sina.com" title="新浪" target="_blank">新浪 </a> 有title也有target="_blank"
5. <a target="_blank" href="http://www.sina.com">新浪 </a>            target="_blank"在前面
6. <a href="http://www.sina.com" rel=nofollow target="_blank">新浪 </a> 带有rel=nofollow

另外还有由上面这6种方式引伸出的其它单引号、双引号与target和title的组合方式

由于a标签里的形式多样,所以必须得过滤严格,不然很容易出错,谢谢各位帮忙

我现在用的正则是这样的 preg_match_all('/<a href="?(?=http:\/\/)([^"]+)"?[^>]+>([^<]+)<\/a>/i',$fp,$tmp);它不能匹配到1 2 5 6的情况
非常感谢大家

[ 本帖最后由 zotong2006 于 2008-7-5 11:57 PM 编辑 ]
2008-7-5 11:15 PM#1
查看资料  发短消息  顶部
 
落寞三少
注册会员
Rank: 2



UID 118524
精华 0
积分 53
帖子 37
金钱 53 喜悦币
威望 0
人脉 0
阅读权限 20
注册 2008-4-10
状态 离线
[推荐阅读] 灌水贴!
回复 #1 zotong2006 的帖子

怎么没人回啊



bbs
2008-7-11 04:57 PM#2
查看资料  发短消息  顶部
 
未注册会员
论坛元老
Rank: 8Rank: 8



UID 71886
精华 0
积分 3928
帖子 190
金钱 3928 喜悦币
威望 0
人脉 0
阅读权限 90
注册 2006-4-18
来自 广东
状态 在线
[推荐阅读] 据公安部姓名查询系统: 全国最爆笑的人名


<?php
"/<a.*href=(S+).*>(.+)</a>/"
?>




80字节以内  
2008-7-11 06:28 PM#3
查看资料  发短消息  顶部
 
飞豹游侠
高级会员
Rank: 4
超高级会员



UID 27267
精华 0
积分 776
帖子 1047
金钱 776 喜悦币
威望 0
人脉 0
阅读权限 50
注册 2004-3-26
来自 沈阳
状态 离线
[推荐阅读] curl模拟登陆时要求验证码
$s = '
1. <a href=http://www.sina.com target=_blank>新浪 </a>              没有引号
2. <a href=\'http://www.sina.com\' target=\'_blank\'>新浪 </a>          单引号
3. <a href="http://www.sina.com" target="_blank">新浪 </a>          双引号
4. <a href="http://www.sina.com" title="新浪" target="_blank">新浪 </a> 有title也有target="_blank"
5. <a target="_blank" href="http://www.sina.com">新浪 </a>            target="_blank"在前面
6. <a href="http://www.sina.com" rel=nofollow target="_blank">新浪 </a> 带有rel=nofollow

';
$pattern = "/<a[\s\t]*[^>]*?href[\s\t]*=[\s\t]*[\'|\"]{0,1}([a-zA-Z0-9\.\-_\/\?\;&=:]*)[\'|\"]{0,1}[\s\t]*[^>]*?>(.*?)<\/a>/si";
preg_match_all($pattern, $s, $result_ary);

print '<pre>';
print_r($result_ary);




我发现我越来越菜,怎么办啊...
家长网
龙之剑,深圳民间反扒队,欢迎加入
2008-7-13 08:58 AM#4
查看资料  访问主页  发短消息  QQ . .   顶部
     


  可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题 | 开通个人空间  


 




Powered by Discuz! 6.1.0  © 2001-2010 Comsenz Inc.
Processed in 0.024542 second(s), 6 queries

(冀ICP备05009913号) 管理员:sadly 邮箱/MSN: sadly@phpx.com QQ:824008(长隐) 清除 Cookies - - Archiver - WAP