我的要求是传递带有 + 的字符串(例如:ABC+DEF)。并且它应该与actual_state的任意值匹配,值可以是ABC+DEF ABC+DEF, ABC+DEF,,
等。这里ABC+DEF后可以有一个或多个逗号。但它不应该与 ABC+DEF, PQR-SL
匹配。
下面是我试过的代码片段:
sub verify_state{
my $expected_state = shift;
my $vol = 'vol';
my $actual_state = 'ABC+DEF,';
print "Verify backend state for $vol\n";
print "Expected backend state for $vol = $expected_state\n";
print "Actual backend state for $vol = $actual_state\n";
if ( $expected_state !~ /$actual_state,*$/ ) {
print
"Expected state was $expected_state but got $actual_state for $vol\n"
;
return 0;
}
return 1;
}
my $val = verify_state('ABC+DEF');
print $val,"\n";
如果我通过 ABC+DEF
,它应该返回 1。
0 如果我将通过 ABC+DEF, PQR-SL
为什么我写 my $actual_state = 'ABC+DEF,';
因为值 ABC+DEF ABC+DEF, ABC+DEF,,
作为特定键的哈希值的一部分出现,例如。 我的 $actual_state = $status->{state};
.
最佳答案
您在 $actual_state
中硬编码了一个逗号 ,
。因此它无法匹配您正在测试的输入,ABC+DEF
没有逗号。您构建模式的方式还需要转义 +
(感谢 slebetman ),所以
my $actual_state = 'ABC\+DEF';
并且发布的代码在我的测试中有效。
这假设您的输入确实必须以该字符串结尾,并且可以选择仅后跟逗号。
关于regex - 无法理解 !~ 在正则表达式中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38890156/