这是密码-
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("$1 and $2\n");
}电流输出- 10 and
预期产出- v="10,20" and 10
如何才能做到这一点?谢谢。
发布于 2021-01-27 05:21:20
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");
}发布于 2021-01-27 03:02:24
您通常不应该尝试在长代码距离内保留和使用$number变量。长的意思是2或3行。您应该始终立即将它们捕获到普通变量。原因是显而易见的,因为你试图颠覆这种智慧。
您的尝试无法工作,因为$num匹配变量是本地化的和词汇范围的。一场成功的比赛击败了之前的任何一场。但是,失败的匹配不会重置它们。请注意。
要将两个regex测试放到一个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(\d\d)/ ? $1 : undef;
if ( defined $s_match and defined $b_match ) {
print("$s_match and $b_match\n");
}HTH
https://stackoverflow.com/questions/65912118
复制相似问题