如何在 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");
}
这是代码-
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");
}