gpt4 book ai didi

正则表达式 $1 变量重置

转载 作者:行者123 更新时间:2023-12-01 22:36:21 24 4
gpt4 key购买 nike

我有以下示例 perl 脚本:

use warnings;
use strict;

my $cont1 = 'item:test';
my $cont2 = 'item:test';

$cont1 =~ s/item:(.*)/$1/; my $one = $1;
$cont2 =~ s/dtms:(.*)/$1/; my $two = $1;

print "one = $one\ntwo = $two\n";

这个脚本执行的结果:

one = test
two = test

问题是 $1 在第一次成功的正则表达式匹配后没有被重置,结果是第二个正则表达式实际上失败了并且应该是空的,而是它从前一个匹配中获取 $1 的值。我发现了一个奇怪的解决方法,通过在第一个正则表达式之后添加奇数正则表达式来重置 $1 =:

"1" =~ /1/;

现在结果是正确的:

one = test
two =

问题是:这是重置 $1 的最佳做法吗?

最佳答案

您没有重置$1。相反,在使用任何捕获变量之前,请始终测试您的正则表达式是否匹配。

my $cont1 = 'item:test';
my $cont2 = 'item:test';

if ($cont1 =~ s/item:(.*)/$1/) {
print "one = $1\n";
}

if ($cont2 =~ s/dtms:(.*)/$1/) {
print "two = $1\n";
}

如果你真的想初始化$one$two,那么使用?:

my $one = $cont1 =~ s/item:(.*)/$1/ ? $1 : '';
my $two = $cont2 =~ s/dtms:(.*)/$1/ ? $1 : '';

关于正则表达式 $1 变量重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22652393/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com