Perl Regex排除Spamassassin的某些TLD

时间:2015-06-26 03:47:39

标签: regex perl uri tld spamassassin

我不是所有能够在Perl中编码;所以,看似简单的事情 - 编写一个正则表达式来为“com”或“net”或“org”TLD 评分所有URI - 显然超出了我的技能。有人可以赐予我启发吗?

例如,我希望https://foo.com.us/asdf?qwerty=123匹配且ftp://madeup.kernel.org/path/to/some/tarball.tar.bz2不匹配。

2 个答案:

答案 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