我不是所有能够在Perl中编码;所以,看似简单的事情 - 编写一个正则表达式来为“com”或“net”或“org”TLD 评分所有URI - 显然超出了我的技能。有人可以赐予我启发吗?
例如,我希望https://foo.com.us/asdf?qwerty=123
匹配且ftp://madeup.kernel.org/path/to/some/tarball.tar.bz2
不匹配。
答案 0 :(得分:1)
正则表达式
//(?:[a-z]+\.)*+(?!com/|net/|org/)
应该做你想做的事。斜杠是模式的一部分,而不是分隔符
这是一个演示
use strict;
use warnings;
use 5.010;
my @urls = qw{
https://foo.com.us/asdf?qwerty=123
ftp://madeup.kernel.org/path/to/some/tarball.tar.bz2
};
for ( @urls ) {
say m{//(?:[a-z]+\.)*+(?!com/|net/|org/)} ? 'match' : 'no match';
}
match
no match
答案 1 :(得分:0)
您应该使用URI
模块将主机名与URL的其余部分分开
此示例仅提取主机名的最终子字符串,因此它会查看来自uk
的{{1}},但它应该符合您的目的
bbc.co.uk