2
我想知道为什么在匹配后,下面的表达式无法将正则表达式值的值(ip地址)赋值给$ ipaddress变量。我尝试了一些推荐的方法(我明显是Perl新手),但他们都失败了。在执行匹配时,每个匹配是否存储在$ 1变量中,范围是1-9,因此第一个默认为$ 1?正则表达式到Perl中的变量赋值失败
代码是:
sub block_match {
my $line_instance_b = $_[0];
my $ipaddress;
if ($line_instance_b =~ /banned_ip|Found UltraSurf Signature|ip_block /) {
$ipaddress = $1 if ($line_instance_b =~ /\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b/);
print "Found ip address: ", $ipaddress, "in the following line: \n",
$line_instance_b;
}
else {
print "Not a block line: \n", $line_instance_b, "\n"
}
}
它是对匹配的行是:
INIT: banned_ip add 208.67.219.132 for FreeGate
在列表上下文匹配返回捕获的列表,你可以做'我($ ip地址)= $ line_instance_b =〜/... /'而不是。另外,我的学生必须指出,你的正则表达式完全排除了IPv6地址的可能性,它最终会咬你。 –