gpt4 book ai didi

Perl 中变量赋值的正则表达式失败

转载 作者:行者123 更新时间:2023-12-02 08:46:17 25 4
gpt4 key购买 nike

我想知道为什么下面的正则表达式匹配的值(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

最佳答案

您使用的是非捕获组 (?:...),它从未分配给匹配变量。

将表达式的(?:[0-9]{1,3}\.){3}部分包裹在()中,捕获到$1:

$ipaddress = $1 if $line_instance_b =~ /\b((?:[0-9]{1,3}\.){3})[0-9]{1,3}\b/;
# ^~~~~~~~~~~~~~~~~~~~^

关于Perl 中变量赋值的正则表达式失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12272712/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com