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地址的可能性,它最終會咬你。 –