我想知道为什么以下内容在匹配后无法将正则表达式匹配的值(IP 地址)分配给 $ipaddress 变量。我尝试了许多推荐的方法(显然我是 Perl 的新手),但都失败了。在执行匹配时,不是每个匹配都存储在 $1 变量中,范围为 1-9,因此第一个默认为 $1?
代码是:
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