如何在perl的Expect模块中使用expect命令搜索相同字符串的多个出现

时间:2012-04-25 10:35:23

标签: perl perl-module expect

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

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

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

1 个答案:

答案 0 :(得分:3)

检查这是否有帮助。

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