首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何捕获perl中由逻辑和if语句分隔的多个regex组?

如何捕获perl中由逻辑和if语句分隔的多个regex组?
EN

Stack Overflow用户
提问于 2021-01-27 02:31:18
回答 2查看 64关注 0票数 1

这是密码-

代码语言:javascript
复制
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

如何才能做到这一点?谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-01-27 05:21:20

代码语言:javascript
复制
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");
}
票数 4
EN

Stack Overflow用户

发布于 2021-01-27 03:02:24

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

您的尝试无法工作,因为$num匹配变量是本地化的和词汇范围的。一场成功的比赛击败了之前的任何一场。但是,失败的匹配不会重置它们。请注意。

要将两个regex测试放到一个if中,您可以做一些诡计,但这并不值得。

代之而行。

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65912118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档