使用 ExpectJ 的正则表达式

使用 ExpectJ 的正则表达式

我已经使用 ExpectJ Java 库来自动化 Linux 服务器上的一些作业,但是现在我需要自动化一个为每次执行发送不同文本响应的作业。这是输出:

Last unsuccessful login: Fri Mar 30 15:21:31 CST 2012 
********************************************************************************

********************************************************************************
[YOU HAVE NEW MAIL] 
local-login [/home/user]%

在我的代码中我有以下内容:

s.expect("Login as:");
s.send("userlogin\n");
s.expect("userlogin@iphost's password:");
s.send("password\n");

我收到显示的输出,但无法发送下一个命令,因为我不知道如何读取最后一个答案,我尝试使用正则表达式,但它不起作用。

答案1

前面的横幅文本不需要处理。 Expect 将等待,直到满足其中一个条件(例如匹配字符串/正则表达式或超时)。之前的文本会被缓冲以供以后使用,但不是匹配的一部分。您需要处理的是寻找提示字符串:local-login [/home/user]%。如果您很清楚它可能是什么样子(例如,总是有“[”目录“]%”,那么您可以编写一个正则表达式来匹配它:

.*\[(/[^/]+)+\]%

确保正则表达式中没有换行符/回车符,因为输出不会有换行符/回车符。

答案2

我不认为你能够使用正则表达式来匹配期待J它似乎就像他们依靠String.indexOf寻找匹配

if (line.toString().trim().toUpperCase().indexOf(pattern.toUpperCase()) != -1)

pattern所提供的预期字符串在哪里。

因此,请尝试匹配子字符串,看看是否效果更好。

相关内容