代码-
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