链接样本特征:
1)
特征:
<a href="url">url</a> ...
示例:
<a href="http://q.cnblogs.com/q/71241/">http://q.cnblogs.com/q/71241/</a><a href="http://q.cnblogs.com/q/71241/">http://q.cnblogs.com/q/71241/</a><a href="http://q.cnblogs.com/q/71241/">http://q.cnblogs.com/q/71241/</a><a href="http://q.cnblogs.com/q/71241/">http://q.cnblogs.com/q/71241/</a><a href="http://q.cnblogs.com/q/71241/">http://q.cnblogs.com/q/71241/</a>
2)
特征:
<a href="url">文本</a> ...
示例:
<a href="http://q.cnblogs.com/q/71241/">测试</a><a href="http://q.cnblogs.com/q/71241/">测试</a><a href="http://q.cnblogs.com/q/71241/">测试</a><a href="http://q.cnblogs.com/q/71241/">测试</a><a href="http://q.cnblogs.com/q/71241/">测试</a>
3)
特征:
url url url ...
示例a:
q.cnblogs.com/q/71241 q.cnblogs.com/q/71241/ q.cnblogs.com/q/71241/ q.cnblogs.com/q/71241/ q.cnblogs.com/q/71241/
示例b:
http://q.cnblogs.com/q/71241 q.cnblogs.com/q/71241/http://q.cnblogs.com/q/71241/http://q.cnblogs.com/q/71241/http://q.cnblogs.com/q/71241/
请问在C#辊如何检测一段文本中是否包含这些链接样本,若包含,需要显示链接数?
第一第二 可以通过 <a> 的正则
第三种可以这样来
(([^/]*\.)+([^/]*))/([^\.]*/)+([^\.]*)?((?=\1|$))
前提是同域名的
实际场景是域名经常变化
@dudu: 第三种场景的域名可能会不一致?
@Yu: 在同一段文本中域名是一致的
@dudu: 那就可以了
@Yu: 你这个在域名前面有http://的时候就不能匹配
@dudu:
((http://)?([^/]*\.)+([^/]*))(/([^\.]*/?)+([^\.]*)?)?((?=\1|$))
@Yu: 这个正则在测试中会造成程序运行死锁
@dudu: 你的测试数据咋样的
@Yu:
var regex = new Regex(@"((http://)?([^/]*\.)+([^/]*))(/([^\.]*/?)+([^\.]*)?)?((?=\1|$))"); var text = "http://q.cnblogs.com/1210768968~-1/155557840_155557840.htm"; var maches = regex.Matches(text);
@dudu:
((http://)([^/\s]*\.)+([^/\s]*)|([^/\s]*\.)+([^/\s]*))(/[^\.\s(http:)/]+(\.htm(l)?)?(?!\.))*
@Yu: 这个测试通过
1、正则;
2、自己写个 html 解析器,只解析 <a href 标签。
html解析器不能处理第3种情况
@dudu: 第三种是啥情况?举个例子看看。
@Launcher:
如下:
q.cnblogs.com/q/71241 q.cnblogs.com/q/71241/ q.cnblogs.com/q/71241/ q.cnblogs.com/q/71241/ q.cnblogs.com/q/71241/
有时多个url之间边空格都没有
@dudu:
没空格的话神仙也不能自动识别呀!
@dudu: 那你这个问题就难了,你还需要解析 URI,考察这两个例子:
q.cnblogs.com/q/71241 q.cnblogs.com/q/71241/
因为有空格,那么根据 URI 的规则,可以分割成两个独立的字符串来做 URI 分析。
q.cnblogs.com/q/71241q.cnblogs.com/q/71241/
因为没有空格,那么根据 URI 规则,它可以拆分成下面两个合法 URI
q.cnblogs.com/q/71241q.c 和 nblogs.com/q/71241/
你可以定期的加入一些规则,比如 q.cnblogs.com 为 URI 中的 userinfo+host+port 节,那么从 / 后的部分就可能为 path 节。
@Launcher: 准备用.com/这个特征试试效果
1、$("a")
2、$("a").length
关键字匹配行不行呢?
URL指向的都是正规网站
@dudu: 对呀,我是指url的关键字。 比如1、2中:<a href="
3中:数字字符.数字字符(q.cnblogs.com)。
@幻天芒: URL没有规律,不同的网站,不同的URL形式
@dudu: 没有规律,就要人工添加规则去匹配吧。
@幻天芒: 只是关键字上没有规律
@dudu: 字符、点就是关键哇,看需求是是否包含大量链接,那只需要判断多不多就行了。
@幻天芒: 特征字符有域名后缀(.com,.net...)、斜杠、点,只要知道数量就行了
@dudu: 直接搜索特征字符数量。
既然是大量,那应该可以通过判断重复字符串来做吧?
主要还是判断是否包含域名吧? a.b.com之类的
1.正则替换法
http://www.cnblogs.com/diony/archive/2010/12/16/1908499.html
2.关键字过滤
mark!