m****v 发帖数: 84 | 1 用pl写的是 $line =~ m!.*(http|https|ftp)://([a-z0-9\-\.]+)(.*)!i
当时认为第二个匹配组就是域名。很明显,这个写法挂了。。。因为域名不能包含前缀
,比如
xxx.mitbbs.com只能返回mitbbs.com,而yyy.mitbbs.edu.cn返回mitbbs.edu.cn。
求教大家怎么做,谢谢。 |
r*******e 发帖数: 7583 | 2 m!.*(http|https|ftp)://(.*?)\.([a-z0-9\-\.]+)(.*)!i
把//和第一个.之间的内容扔到一个单独的group里
【在 m****v 的大作中提到】 : 用pl写的是 $line =~ m!.*(http|https|ftp)://([a-z0-9\-\.]+)(.*)!i : 当时认为第二个匹配组就是域名。很明显,这个写法挂了。。。因为域名不能包含前缀 : ,比如 : xxx.mitbbs.com只能返回mitbbs.com,而yyy.mitbbs.edu.cn返回mitbbs.edu.cn。 : 求教大家怎么做,谢谢。
|
m****v 发帖数: 84 | 3 谢谢,很巧妙的思路。
但如果是aaa.bbb.mitbbs.com这种呢,aaa和bbb都不是域名部分。
还有一种情况就是http://mitbbs.com/xxx用你说的方法好像不对。
是不是应该从后往前匹配比较好。
【在 r*******e 的大作中提到】 : m!.*(http|https|ftp)://(.*?)\.([a-z0-9\-\.]+)(.*)!i : 把//和第一个.之间的内容扔到一个单独的group里
|
r*******e 发帖数: 7583 | 4 你这里说的域名到底是怎么定义的?
顶级域名加上之前的一个字段?
【在 m****v 的大作中提到】 : 谢谢,很巧妙的思路。 : 但如果是aaa.bbb.mitbbs.com这种呢,aaa和bbb都不是域名部分。 : 还有一种情况就是http://mitbbs.com/xxx用你说的方法好像不对。 : 是不是应该从后往前匹配比较好。
|
p******r 发帖数: 2999 | 5 m!
(?:(http|https|ftp)://) # protocol
(?:\w+\.)? # optional subdomain
(
(?:\w{2,})
(?:\.[a-z]{3,4}) # com,org,edu etc
(?:\.[a-z]{2})? # optional country code
) # domain name, catch this part only
!xi
enabling /x to comment inline is a good habbit
【在 m****v 的大作中提到】 : 用pl写的是 $line =~ m!.*(http|https|ftp)://([a-z0-9\-\.]+)(.*)!i : 当时认为第二个匹配组就是域名。很明显,这个写法挂了。。。因为域名不能包含前缀 : ,比如 : xxx.mitbbs.com只能返回mitbbs.com,而yyy.mitbbs.edu.cn返回mitbbs.edu.cn。 : 求教大家怎么做,谢谢。
|
m****v 发帖数: 84 | 6
一般来说,应该是顶级域名一个字段,加上前面一个字段,比如说是公司的名字、网站
的名字。加起来
就是xxx.com,yyy.org这种
但是有时候,顶级域名会有两个字段,比如aaa.co.uk,bbb.edu.cn这种
【在 r*******e 的大作中提到】 : 你这里说的域名到底是怎么定义的? : 顶级域名加上之前的一个字段?
|