【问题标题】:How-To Perl recursive regex操作方法 Perl 递归正则表达式
【发布时间】:2011-11-01 17:36:05
【问题描述】:

我有需要测试的设备的输出,大多数响应是一行,但有时是两行。我用一个简单的正则表达式来处理一两行

if ($prompt =~ /(\s.*?)\r\n(.*)/)
{
   Note('Multiline '.$string);
   TestPrompt($string, $1);
   TestPrompt($string, $2);
}
else
{
   TestPrompt($string, $prompt);
}

但是如果响应超过两行怎么办?此代码无法处理额外的行,我希望在我的设计中保持稳健。有没有办法从正则表达式中捕获以用于foreach

【问题讨论】:

  • 您应该提供一些输入和一些所需的输出。没有这两个就不可能帮助你:)

标签: regex perl testing functional-testing prompt


【解决方案1】:

为什么不使用split 函数来代替呢?这是link to some examples 的用法。对于您的示例,为什么不这样做:

my @lines=split /\r\n/,$prompt;

Note("Multiline $string") if @lines>1; 

foreach my $line (@lines) 
{ 
   TestPrompt($string, $line);
} 

【讨论】:

  • +1 我建议@lines > 1 而不是$#lines 支票。
  • @pilcrow,完成...也替换了“。”使用双引号字符串文字将参数连接到 Note 以提高可读性。
  • 看起来就像我需要的一样,现在我需要弄清楚为什么我想不到split ;)
【解决方案2】:

你可以在换行符处拆分:

my @lines = split /\r\n/, $prompt;
foreach (@lines) {
    TestPrompt( $string, $_ );
}

【讨论】:

    【解决方案3】:

    您可以在列表上下文中使用全局匹配:

        my @prompts = m{(\s*\S*?)\r\n}g;
        for my $prompt (@prompts) {
            print "$prompt\n";
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-27
      • 2016-08-12
      • 2012-01-16
      • 1970-01-01
      • 2012-05-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多