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

标签 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";

如果我通过 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/

相关文章:

regex - 将 SIMILAR TO 用于正则表达式?

javascript - 我想检查 yyyy-mm-dd hh :mm (regular expression)

perl - 在 Perl 中 : Is there a way to know the name of a variable in a list?

perl - Perl 程序员可以使用哪些 emacs 工具?如何安装它们?

perl - 仅在外部应用程序存在时运行的最佳方式

java - 是否有与 Perl 的 Java 机器人类 (java.awt.Robot) 等效的类?

c# - 去除word中两个或多个空格之间的空白

php - Preg 匹配 2 个字符串之间的任何内容

仅过滤 2 个或更多数字的正则表达式模式

perl - 根据标题关闭选项卡