Redian新闻
>
问一道编程面试题:regex匹配文本中的域名
avatar
问一道编程面试题:regex匹配文本中的域名# JobHunting - 待字闺中
m*v
1
用pl写的是 $line =~ m!.*(http|https|ftp)://([a-z0-9\-\.]+)(.*)!i
当时认为第二个匹配组就是域名。很明显,这个写法挂了。。。因为域名不能包含前缀
,比如
xxx.mitbbs.com只能返回mitbbs.com,而yyy.mitbbs.edu.cn返回mitbbs.edu.cn。
求教大家怎么做,谢谢。
avatar
r*e
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。
: 求教大家怎么做,谢谢。

avatar
m*v
3
谢谢,很巧妙的思路。
但如果是aaa.bbb.mitbbs.com这种呢,aaa和bbb都不是域名部分。
还有一种情况就是http://mitbbs.com/xxx用你说的方法好像不对。
是不是应该从后往前匹配比较好。

【在 r*******e 的大作中提到】
: m!.*(http|https|ftp)://(.*?)\.([a-z0-9\-\.]+)(.*)!i
: 把//和第一个.之间的内容扔到一个单独的group里

avatar
r*e
4
你这里说的域名到底是怎么定义的?
顶级域名加上之前的一个字段?

【在 m****v 的大作中提到】
: 谢谢,很巧妙的思路。
: 但如果是aaa.bbb.mitbbs.com这种呢,aaa和bbb都不是域名部分。
: 还有一种情况就是http://mitbbs.com/xxx用你说的方法好像不对。
: 是不是应该从后往前匹配比较好。

avatar
p*r
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。
: 求教大家怎么做,谢谢。

avatar
m*v
6

一般来说,应该是顶级域名一个字段,加上前面一个字段,比如说是公司的名字、网站
的名字。加起来
就是xxx.com,yyy.org这种
但是有时候,顶级域名会有两个字段,比如aaa.co.uk,bbb.edu.cn这种

【在 r*******e 的大作中提到】
: 你这里说的域名到底是怎么定义的?
: 顶级域名加上之前的一个字段?

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。