无法理解!~在正则表达式中

Sat*_*tya 2 regex perl

我的要求是传递一个带有 + 的字符串(例如: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";
Run Code Online (Sandbox Code Playgroud)

如果我通过,它应该返回我 1 ABC+DEF。0 如果我会通过ABC+DEF, PQR-SL

为什么我写my $actual_state = 'ABC+DEF,'; 因为这些值ABC+DEF ABC+DEF, ABC+DEF,,是作为特定键的哈希值的一部分出现的,例如。my $actual_state = $status->{state};.

zdi*_*dim 5

,$actual_state. 所以它不能匹配你正在测试的输入,ABC+DEF没有逗号。您构建模式的方式还需要逃避+(感谢slebetman),所以

my $actual_state = 'ABC\+DEF';
Run Code Online (Sandbox Code Playgroud)

并且发布的代码在我的测试中有效。

这假设您的输入确实必须以该字符串结尾,并且可以选择后跟逗号。