Perl Regex的问题

时间:2016-01-19 08:13:42

标签: regex perl

新的perl编码器在这里。

当我将网站上的文本复制并粘贴到文本文件中并从该文件中读取时,我的perl脚本无问题。当我使用getstore自动从网站创建一个我想要的文件时,输出就是一堆|' s。

当我复制和粘贴文本或使用getstore下载文本时,文本看起来相同。我无法找出问题所在。任何帮助都将受到高度赞赏。

我想要的输出如下:

|www\.arkinsoftware\.in|www\.askmeaboutrotary\.com|www\.assculturaleincontri\.it|www\.asu\.msmu\.ru|www\.atousoft\.com|www\.aucoeurdelanature\.
enter code here

以下是我正在使用的代码:

#!/usr/bin/perl

use strict;
use warnings;
use LWP::Simple;

getstore("http://www.malwaredomainlist.com/hostslist/hosts.txt",     "malhosts.txt");

open(my $input, "<", "malhosts.txt");

while (my $line = <$input>) {
    chomp $line;
    $line =~ s/.*\s+//;
    $line =~ s/\./\\\./g;
    print "$line\|";
}

3 个答案:

答案 0 :(得分:0)

这就是我要做的事情:

my $first = 1;
while (<$input>) {
    /^127\.0\.0\.1\s+(.+?)\s*$/ or next;
    print '|' if !$first;
    $first = 0;
    print quotemeta($1);
}

这会以更精确的方式匹配您的输入,quotemeta负责真正的正则表达式转义。

答案 1 :(得分:0)

一堆|你得到的,是从一开始的不合适的评论行。因此,解决方案是忽略所有&#34;不适合&#34;线。

所以而不是

$line =~ s/.*\s+//;

使用

next unless $line =~ s/^127.*\s+//;

所以你会忽略除了从127开始的每一行。

答案 2 :(得分:0)

我可能会选择以下内容:

#!/usr/bin/perl

use strict;
use warnings;
use LWP::Simple;

getstore( "http://www.malwaredomainlist.com/hostslist/hosts.txt",
    "malhosts.txt" );

open( my $input, "<", "malhosts.txt" );

print join ( "|", 
        map { m/^\d/ && ! m/localhost/ ? 
              quotemeta ((split)[1]) : () } <$input> ); 

给出:

0koryu0\.easter\.ne\.jp|1\-atraffickim\.tf|10\-trafficimj\.tf|109\-204\-26\-16\.netconnexion\.managedbroadband\.co\.uk|11\-atraasikim\.tf|11\.lamarianella\.info|12\-tgaffickvcmb\.tf|  #etc.