如何捕获多个正则表达式组由逻辑和分隔内的一个if语句在perl?



代码-

my $s_ver = 'port=":443"; d=3600; v="10,20"';
my $b_ver = 'FB10';
if ($s_ver =~ /(v="[0-9]+(,[0-9]+)*")/ && $b_ver =~ /FB(dd)/){
{
print("$1 and $2n");
}

电流输出10 and

期望输出-v="10,20" and 10

如何做到这一点?谢谢。

if ( 
( my ($s_cap) = $s_ver =~ /(v="[0-9]+(?:,[0-9]+)*")/ ) &&
( my ($b_cap) = $b_ver =~ /FB(dd)/ )
) {
print("$s_cap and $b_capn");
}

您通常不应该尝试在长代码距离内保留和使用$number变量。长意思是2或3行。您应该立即将它们捕获为正常变量。从你试图颠覆这种智慧的行为来看,原因显而易见。

你的尝试不能工作,因为$num匹配变量是本地化的和词法范围。一场成功的比赛击败了之前的任何一场比赛。但是,失败的匹配不会重置它们。购者自慎。

你可以把你的两个正则表达式测试变成一个单一的if,但这是不值得的。

改为

my $s_ver = 'port=":443"; d=3600; v="10,20"';
my $b_ver = 'FB10';
my $s_match = $s_ver =~ m/(v="[0-9]+(?:,[0-9]+)*")/ ? $1 : undef;
my $b_match = $b_ver =~ m/FB(dd)/                 ? $1 : undef;
if ( defined $s_match and defined $b_match ) {
print("$s_match and $b_matchn");
}

HTH

相关内容

  • 没有找到相关文章

最新更新