0

だから私はこれを行うハッシュの要素にすべての番号付きドメインを入れようとしています:

### Domanis ###
my $dom = $name;
$dom =~ /(\w+\.\w+)$/; #this regex get the domain names only
my $temp = $1;

if ($temp =~ /(^d+\.\d+)/) { # this regex will take out the domains with number 
    my $foo = $1;
    $foo = "OTHER";
    $domain{$foo}++;
}
else {
    $domain{$temp}++;
}

どこ$nameに次のようなものがあります:

something.something.72.154
something.something.72.155
something.something.72.173
something.something.72.175
something.something.73.194
something.something.73.205
something.something.73.214
something.something.abbnebraska.com
something.something.cableone.net
something.something.com.br
something.something.cox.net
something.something.googlebot.com

私のコードは現在これを印刷します:

72.175
73.194
73.205
73.214
abbnebraska.com
cableone.net
com.br
cox.net
googlebot.com
lstn.net

しかし、私はそれを次のように印刷したい:

abbnebraska.com
cableone.net
com.br
cox.net
googlebot.com
OTHER
lstn.net

OTHER番号が付けられたすべてのドメインはどこにありますか?

4

3 に答える 3

0

変数を 2 つに分割する必要はありません。たとえば、この正規表現は、トラップしたいケースに一致します /\d{1,3}\.\d{1,3}$/

ただし、番号が付けられていないドメインのみを分離する必要がある場合は、ドメインの最後の文字が文字かどうかを確認するだけで済みます.TLDには数字を含めることができないため、次のようにします-trueを /\w$/返す場合、それは番号付きドメインではありません (スペースと改行を削除した場合)

しかし、正規表現でより具体的にする方が良いと思います。これは、スクリプトで探しているロジックをよりよく示しているため、以前の正規表現を使用します。

実際には、次のようなことができます。

if (my ($domain) = $name =~ /\.(\w+.\w+)$/)
{
#the domain is assigned to the variable $domain
} else {
#it is a number domain
}
于 2013-11-12T23:03:03.873 に答える