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

How to capture multiple regex groups separated by logical AND inside an if statement in 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(\d\d)/){
{
   print(" and \n");
}

当前输出 - 10 and

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

如何实现?谢谢

您通常不应尝试在较长的代码距离内保留和使用 $number 变量。长表示 2 或 3 行。您应该始终立即将它们捕获到普通变量。从你试图颠覆这种智慧的尝试中可以看出原因。

您的尝试无效,因为 $num 匹配变量是本地化的和词法范围的。一场成功的比赛击败了之前的任何一场比赛。然而 failed 匹配不会重置它们。买者自负。

您可以采取一些策略将两个正则表达式测试合并为一个 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]+)*")/ ?  : undef;
my $b_match = $b_ver =~ m/FB(\d\d)/                 ?  : undef;

if ( defined $s_match and defined $b_match ) {
   print("$s_match and $b_match\n");
}

HTH

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