【问题标题】:How to make expect command in Expect module of perl search for multiple occurences of same string如何在perl的Expect模块中使expect命令搜索相同字符串的多次出现
【发布时间】:2012-04-26 22:19:38
【问题描述】:

我有一个场景,我正在使用 perl 的 expect 模块来自动化基于终端的应用程序。我将正则表达式作为参数传递给期望命令,如下所示

$ssh->expect(20, '-re',
    'Dev:(\d+)\W*Bdaddr:((?:[[:xdigit:]]{2}:){5}[[:xdigit:]]{2})\W*Name:' );

所以我想对期望使用的字符串缓冲区中多次出现的模式进行相同的正则表达式搜索。如何实现。另外,我想知道如何捕获这些多次出现。

【问题讨论】:

  • 请编辑问题以包含应匹配的示例字符串。
  • 说我正在寻找“你好”。在期望缓冲区中可能不止一次出现 Hello。通常,只要第一次找到“Hello”,期望就会返回。现在我想要的是找到第二次出现的“Hello”

标签: perl perl-module expect


【解决方案1】:

检查这是否有帮助。

use Expect;

my $Obj = Expect->new();

$Obj->spawn("/some/tst.bash");

$Obj->expect(undef,
    [ qr/(?:.*?Hello){2}/i, sub {
            my $Self = shift;
            print "Matched qr/.*?Hello.*?Hello/i..\n";
            exp_continue; }
    ]
);

/some/tst.bash 看起来像这样。

echo "Hello! This is for testing. !Hello"

基本上,正则表达式 (?:.*?Hello){2} 会在 Hello 之后查找任何/无。因此,从本质上讲,以下内容也会匹配 HelloHello

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-13
    • 2014-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多